Überprüfen von Code mit Abhängigkeitsdiagrammen

Wozu dienen Abhängigkeitsdiagramme?

Um sicherzustellen, dass der Code dem Entwurf nicht widerspricht, können Sie Ihren Code in Visual Studio mit Abhängigkeitsdiagrammen überprüfen. Dadurch wird Folgendes ermöglicht:

  • Ermitteln Sie Konflikte zwischen Abhängigkeiten im Code und Abhängigkeiten im Abhängigkeitsdiagramm.

  • Ermitteln von Abhängigkeiten, die möglicherweise von vorgeschlagenen Änderungen betroffen sind

    Sie können z. B. das Abhängigkeitsdiagramm bearbeiten, um potenzielle Architekturänderungen darzustellen, und dann den Code überprüfen, um die betroffenen Abhängigkeiten zu ermitteln.

  • Umgestalten oder Migrieren von Code in einen anderen Entwurf

    Ermitteln von Code oder Abhängigkeiten, die bei der Umstellung des Codes auf eine andere Architektur noch bearbeitet werden müssen

Anforderungen

  • Visual Studio

    Um ein Abhängigkeitsdiagramm für ein .NET Core-Projekt zu erstellen, benötigen Sie Visual Studio 2019 Version 16.2 oder höher.

  • Eine Projektmappe mit einem Modellierungsprojekt und einem Abhängigkeitsdiagramm. Dieses Abhängigkeitsdiagramm muss mit Artefakten in C#- oder Visual Basic-Projekten verknüpft sein, die Sie überprüfen möchten. Weitere Informationen finden Sie unter Erstellen von Abhängigkeitsdiagrammen aus dem Code.

Welche Visual Studio-Editionen dieses Feature unterstützen, erfahren Sie unter Edition-Unterstützung für Architektur- und Modellierungstools.

Sie können Code über ein geöffnetes Abhängigkeitsdiagramm in Visual Studio oder eine Eingabeaufforderung manuell überprüfen. Sie können Code auch beim Ausführen von lokalen Builds oder Azure Pipelines-Build automatisch überprüfen.

Wichtig

Wenn Sie die Ebenenvalidierung mit Team Foundation Server (TFS) ausführen möchten, muss auf dem Buildserver auch Visual Studio installiert werden.

Live-Abhängigkeitsvalidierung

Die Abhängigkeitsvalidierung erfolgt in Echtzeit, und Fehler werden sofort in der Fehlerliste angezeigt.

  • Die Livevalidierung wird für die Programmiersprachen C# und Visual Basic unterstützt.

  • Um die vollständige Lösungsanalyse bei Verwendung der Live-Abhängigkeitsvalidierung zu aktivieren, öffnen Sie die Optionseinstellungen auf dem Goldbarren, der in der Fehlerliste angezeigt wird.

    • Sie können den Goldbarren dauerhaft ausblenden, wenn Sie nicht daran interessiert sind, alle architekturbezogenen Probleme in Ihrer Projektmappe anzuzeigen.
    • Wenn Sie keine vollständige Projektmappenanalyse aktivieren, wird die Analyse nur für die Dateien durchgeführt, die bearbeitet werden.
  • Wenn Sie Projekte aktualisieren, um die Livevalidierung zu aktivieren, wird in einem Dialogfeld der Fortschritt der Konvertierung angezeigt.

  • Beim Aktualisieren eines Projekts für die Live-Abhängigkeitsvalidierung wird für alle Projekte ein Upgrade des NuGet-Pakets auf eine identische Version (die höchste verwendete Version) durchgeführt.

  • Durch das Hinzufügen eines neuen Projekts zur Abhängigkeitsvalidierung wird ein Projektupdate ausgelöst.

Sehen, ob ein Element die Validierung unterstützt

Sie können Ebenen mit Websites, Office-Dokumenten, Nur-Text-Dateien und Dateien in Projekten verknüpfen, die von mehreren Apps gemeinsam verwendet werden, jedoch nicht im Validierungsprozess enthalten sind. Für Verweise auf Projekte oder Assemblys, die mit separaten Ebenen verknüpft sind, treten keine Validierungsfehler auf, wenn keine Abhängigkeiten zwischen diesen Ebenen angezeigt werden. Solche Verweise werden nur dann als Abhängigkeiten betrachtet, wenn sie im Code verwendet werden.

  1. Wählen Sie im Abhängigkeitsdiagramm eine oder mehrere Ebenen aus, klicken Sie mit der rechten Maustaste auf die Auswahl, und klicken Sie dann auf Links anzeigen.

  2. Überprüfen Sie im Ebenen-Explorer die Spalte Unterstützt die Validierung. Wenn der Wert "false" ist, wird die Überprüfung vom Element nicht unterstützt.

Andere .NET-Assemblys und Projekte zur Validierung einschließen

Wenn Sie Elemente in das Abhängigkeitsdiagramm ziehen, werden dem Ordner Ebenenverweise im Modellierungsprojekt automatisch Verweise auf die entsprechenden .NET-Assemblys oder -Projekte hinzugefügt. Dieser Ordner enthält Verweise auf die Assemblys und Projekte, die bei der Validierung analysiert werden. Sie können weitere .NET-Assemblys und -Projekte für die Validierung hinzufügen, ohne diese manuell in das Abhängigkeitsdiagramm zu ziehen.

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Modellierungsprojekt oder den Ordner Ebenenverweise, und klicken Sie dann auf Verweis hinzufügen.

  2. Wählen Sie im Dialogfeld Verweis hinzufügen die Assemblys oder Projekte aus, und klicken Sie anschließend auf OK.

Code manuell überprüfen

Wenn ein geöffnetes Abhängigkeitsdiagramm mit Projektmappenelementen verknüpft ist, können Sie den Kurzbefehl Überprüfen im Diagramm ausführen. Sie können auch den Befehl msbuild über die Eingabeaufforderung ausführen. Dabei muss die benutzerdefinierte /p:ValidateArchitecture-Eigenschaft auf True festgelegt sein. Bei Codeänderungen sollten Sie beispielsweise regelmäßig eine Ebenenvalidierung durchführen, um Abhängigkeitskonflikte frühzeitig lösen zu können.

Überprüfen von Code in einem offenen Abhängigkeitsdiagramm

  1. Klicken Sie mit der rechten Maustaste auf die Diagrammoberfläche, und klicken Sie dann auf Architektur überprüfen.

    Hinweis

    Die BuildAction-Eigenschaft in der Abhängigkeitsdiagrammdatei (.layerdiagram) ist standardmäßig auf Validate (Überprüfen) festgelegt, sodass das Diagramm in den Validierungsvorgang eingeschlossen wird.

    Im Fenster Fehlerliste werden ggf. auftretende Fehler angezeigt. Weitere Informationen zu Validierungsfehlern finden Sie unter Behandeln von Ebenenvalidierungsfehlern.

  2. Um die Quelle der einzelnen Fehler anzuzeigen, doppelklicken Sie im Fenster Fehlerliste auf den Fehler.

    Hinweis

    Visual Studio zeigt möglicherweise anstelle der Fehlerquelle eine Code Map an. Dies ist der Fall, wenn der Code eine Abhängigkeit von einer Assembly enthält, die nicht im Abhängigkeitsdiagramm angegeben ist, oder wenn im Code eine im Abhängigkeitsdiagramm angegebene Abhängigkeit fehlt. Überprüfen Sie die Code Map oder den Code, um festzustellen, ob die Abhängigkeit vorhanden sein sollte. Weitere Informationen zu Code Maps finden Sie unter Projektmappenübergreifendes Zuordnen von Abhängigkeiten.

  3. Informationen zum Verwalten von Fehlern finden Sie unter Behandeln von Ebenenvalidierungsfehlern.

Überprüfen von Code an der Eingabeaufforderung

  1. Öffnen Sie die Visual Studio-Eingabeaufforderung.

  2. Wählen Sie eine der folgenden Optionen aus:

    • Wenn Sie Code anhand eines bestimmten Modellierungsprojekts in der Projektmappe überprüfen möchten, führen Sie MSBuild mit der folgenden benutzerdefinierten Eigenschaft aus.

      msbuild <FilePath+ModelProjectFileName>.modelproj /p:ValidateArchitecture=true
      
      • ODER

        Navigieren Sie zum Ordner mit der Modellierungsprojektdatei (.modelproj) und dem Abhängigkeitsdiagramm, und führen Sie MSBuild dann mit der folgenden benutzerdefinierten Eigenschaft aus:

        msbuild /p:ValidateArchitecture=true
        
    • Wenn Sie Code mit allen Modellierungsprojekten in der Projektmappe überprüfen möchten, führen Sie MSBuild mit der folgenden benutzerdefinierten Eigenschaft aus:

      msbuild <FilePath+SolutionName>.sln /p:ValidateArchitecture=true
      
      • ODER

        Navigieren Sie zu einem Projektmappenordner, der ein Modellierungsprojekt mit einem Abhängigkeitsdiagramm enthält, und führen Sie MSBuild dann mit der folgenden benutzerdefinierten Eigenschaft aus:

        msbuild /p:ValidateArchitecture=true
        

      Alle aufgetretenen Fehler werden aufgelistet. Weitere Informationen zu MSBuild finden Sie unter MSBuild und MSBuild-Aufgabe.

    Weitere Informationen zu Validierungsfehlern finden Sie unter Behandeln von Ebenenvalidierungsfehlern.

Validierungsfehler verwalten

Während des Entwicklungsprozesses können Sie ggf. einige der Konflikte unterdrücken, die während der Validierung gemeldet werden. Beispielsweise können Sie Fehler unterdrücken, die Sie bereits behandeln oder die für das spezifische Szenario nicht relevant sind. Wenn Sie einen Fehler unterdrücken, empfiehlt es sich, in Team Foundation ein Arbeitselement zu protokollieren.

Warnung

Sie müssen bereits mit der TFS-Quellcodeverwaltung verbunden sein, um ein Arbeitselement zu erstellen oder zu verknüpfen. Wenn Sie versuchen, eine Verbindung mit einer anderen TFS-Quellcodeverwaltung herzustellen, schließt Visual Studio automatisch die aktuelle Projektmappe. Stellen Sie sicher, dass Sie bereits mit der richtigen Quellcodeverwaltung verbunden sind, bevor Sie versuchen, ein Arbeitselement zu erstellen oder zu verknüpfen. In höheren Versionen von Visual Studio stehen die Menübefehle nicht zur Verfügung, wenn Sie mit keiner Quellcodeverwaltung verbunden sind.

Erstellen eines Arbeitselements für einen Validierungsfehler

  • Klicken Sie im Fenster Fehlerliste mit der rechten Maustaste auf den Fehler, zeigen Sie auf Arbeitselement erstellen, und klicken Sie anschließend auf den zu erstellenden Arbeitselementtyp.

Mithilfe dieser Aufgaben können Sie Validierungsfehler im Fenster Fehlerliste unterdrücken:

An Führen Sie diese Schritte aus.
Unterdrücken von ausgewählten Fehlern während der Validierung Klicken Sie mit der rechten Maustaste auf den oder die ausgewählten Fehler, zeigen Sie auf Validierungsfehler verwalten, und klicken Sie anschließend auf Fehler unterdrücken.

Die unterdrückten Fehler werden durchgestrichen dargestellt. Beim nächsten Ausführen der Validierung werden diese Fehler nicht mehr angezeigt.

Unterdrückte Fehler werden in einer SUPPRESSIONS-Datei für die entsprechende Abhängigkeitsdiagrammdatei nachverfolgt.
Beenden der Unterdrückung von ausgewählten Fehlern Klicken Sie mit der rechten Maustaste auf die unterdrückten Fehler, zeigen Sie auf Validierungsfehler verwalten, und klicken Sie dann auf Fehler nicht mehr unterdrücken.

Beim nächsten Ausführen der Validierung werden die ausgewählten unterdrückten Fehler wieder angezeigt.
Wiederherstellen aller unterdrückten Fehler im Fenster Fehlerliste Klicken Sie mit der rechten Maustaste auf eine beliebige Stelle im Fenster Fehlerliste, zeigen Sie auf Validierungsfehler verwalten, und klicken Sie dann auf Unterdrückte Fehler anzeigen.
Ausblenden aller unterdrückten Fehler im Fenster Fehlerliste Klicken Sie mit der rechten Maustaste auf eine beliebige Stelle im Fenster Fehlerliste, zeigen Sie auf Validierungsfehler verwalten, und klicken Sie dann auf Unterdrückte Fehler ausblenden.

Code automatisch überprüfen

Sie können eine Ebenenvalidierung bei jeder Ausführung eines lokalen Builds durchführen. Wenn Ihr Team Azure DevOps verwendet, können Sie eine Ebenenvalidierung mit Gated-Check-Ins durchführen, die Sie angeben können, indem Sie eine benutzerdefinierte MSBuild-Aufgabe erstellen und Validierungsfehler mithilfe von Buildberichten sammeln. Informationen zum Erstellen von Builds mit Gated-Check-Ins finden Sie unter TFVC: Gated-Check-In.

So überprüfen Sie Code automatisch während eines lokalen Builds

Öffnen Sie die Modellierungsprojektdatei (.modelproj) mithilfe eines Text-Editors, und fügen Sie dann die folgende Eigenschaft ein:

<ValidateArchitecture>true</ValidateArchitecture>

- oder -

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Modellierungsprojekt, das die Abhängigkeitsdiagramme enthält, und klicken Sie dann auf Eigenschaften.

  2. Legen Sie im Eigenschaftenfenster die ValidateArchitecture-Eigenschaft des Modellierungsprojekts auf True fest.

    Dadurch wird das Modellierungsprojekt in den Validierungsprozess eingeschlossen.

  3. Klicken Sie im Projektmappen-Explorer auf die Abhängigkeitsdiagrammdatei (.layerdiagram), die Sie für die Validierung verwenden möchten.

  4. Vergewissern Sie sich im Eigenschaftenfenster, dass die BuildAction-Eigenschaft des Diagramms auf Validate (Überprüfen) festgelegt ist.

    Dadurch wird das Abhängigkeitsdiagramm in den Validierungsprozess eingeschlossen.

Informationen zum Verwalten von Fehlern im Fenster „Fehlerliste“ finden Sie unter Behandeln von Validierungsfehlern.

Ebenenvalidierungsprobleme beheben

In der folgenden Tabelle sind Ebenenvalidierungsprobleme und entsprechende Auflösungen aufgeführt. Diese Probleme unterscheiden sich von Fehlern, die das Ergebnis von Konflikten zwischen Code und Entwurf sind. Weitere Informationen zu diesen Fehlern finden Sie unter Behandeln von Ebenenvalidierungsfehlern.

Problem Mögliche Ursache Auflösung
Validierungsfehler treten nicht wie erwartet auf. Die Validierung funktioniert nicht mit Abhängigkeitsdiagrammen, die aus anderen Abhängigkeitsdiagrammen im Projektmappen-Explorer kopiert wurden und sich im gleichen Modellierungsprojekt befinden. Abhängigkeitsdiagramme, die auf diese Weise kopiert werden, enthalten die gleichen Verweise wie das ursprüngliche Abhängigkeitsdiagramm. Fügen Sie dem Modellierungsprojekt ein neues Abhängigkeitsdiagramm hinzu.

Kopieren Sie die Elemente aus dem ursprünglichen Abhängigkeitsdiagramm in das neue Diagramm.

Behandeln von Ebenenvalidierungsfehlern

Beim Überprüfen von Code anhand eines Abhängigkeitsdiagramms treten Validierungsfehler auf, wenn der Code mit dem Entwurf in Konflikt steht. Validierungsfehler können beispielsweise unter folgenden Bedingungen auftreten:

  • Ein Artefakt wurde der falschen Ebene zugewiesen. Verschieben Sie in diesem Fall das Artefakt.

  • Von einem Artefakt (beispielsweise einer Klasse) wird eine andere Klasse auf eine Weise verwendet, die einen Konflikt mit der Architektur zur Folge hat. Gestalten Sie in diesem Fall den Code um, um die Abhängigkeit zu entfernen.

Aktualisieren Sie zum Beheben dieser Fehler den Code, bis bei der Validierung keine Fehler mehr angezeigt werden. Diese Aufgabe kann iterativ ausgeführt werden.

Im folgenden Abschnitt wird die Syntax beschrieben, die in diesen Fehlern verwendet wird. Außerdem wird die Bedeutung dieser Fehler erläutert, und es werden Vorschläge zur deren Behebung bzw. Verwaltung gegeben.

Syntax Beschreibung
ArtifactN(ArtifactTypeN) ArtifactN ist ein Artefakt, das einer Ebene im Abhängigkeitsdiagramm zugeordnet ist.

ArtifactTypeN ist der Typ von ArtifactN (z. B. eine Klasse oder Methode). Beispiel:

MySolution.MyProject.MyClass.MyMethod(Method)
NamespaceNameN Der Name eines Namespace.
LayerNameN Der Name einer Ebene im Abhängigkeitsdiagramm.
DependencyType Der Typ der Abhängigkeitsbeziehung zwischen Artifact1 und Artifact2. Artifact1 besitzt z. B. eine Beziehung vom Typ Aufrufe zu Artifact2.
Fehlersyntax Fehlerbeschreibung
DV0001: Ungültige Abhängigkeit Dieses Problem wird gemeldet, wenn ein Codeelement (Namespace, Typ, Member), das einer Ebene zugeordnet ist, auf ein Codeelement verweist, das einer anderen Ebene zugeordnet ist, aber im Abhängigkeitsdiagramm für die Validierung, das diese Ebenen enthält, kein Abhängigkeitspfeil zwischen diesen Ebenen vorhanden ist. Dies gilt als Verletzung der Abhängigkeitseinschränkung.
DV1001: Ungültiger Namespacename Dieses Problem wird für ein Codeelement gemeldet, das einer Ebene zugeordnet ist, deren Eigenschaft „Zulässige Namespacenamen“ nicht den Namespace enthält, in dem dieses Codeelement definiert ist. Dies gilt als Verstoß gegen die Benennungseinschränkung. Beachten Sie, dass die Syntax von „Zulässige Namespacenamen“ eine durch Semikolons getrennte Liste von Namespaces vorschreibt, in denen Codeelemente definiert werden dürfen, die der Ebene zugeordnet sind.
DV1002: Abhängigkeit von nicht referenzierbarem Namespace Dieses Problem wird für ein Codeelement gemeldet, das einer Ebene zugeordnet ist und auf ein anderes Codeelement verweist, das in einem Namespace definiert ist, der in der Eigenschaft „Nicht referenzierbarer Namespace“ der Ebene definiert ist. Dies gilt als Verstoß gegen die Benennungseinschränkung. Beachten Sie, dass die Eigenschaft „Nicht referenzierbare Namespaces“ als eine durch Semikolons getrennte Liste von Namespaces definiert ist, auf die in Codeelementen, die dieser Ebene zugeordnet sind, nicht verwiesen werden soll.
DV1003: Unzulässiger Namespacename Dieses Problem wird für ein Codeelement gemeldet, das einer Ebene zugeordnet ist, deren Eigenschaft „Unzulässige Namespacenamen“ den Namespace enthält, in dem dieses Codeelement definiert ist. Dies gilt als Verstoß gegen die Benennungseinschränkung. Beachten Sie, dass die Eigenschaft „Unzulässige Namespacenamen“ als eine durch Semikolons getrennte Liste von Namespaces definiert ist, in denen dieser Ebene zugeordnete Codeelemente nicht definiert werden sollen.
DV2001: Fehlendes Ebenendiagramm Dieses Problem wird für ein Projekt gemeldet, das keine Abhängigkeitsdiagrammdatei enthält, sich aber auf die Analysetools zur Abhängigkeitsvalidierung bezieht. Wenn die Abhängigkeitsvalidierung nicht verwendet wurde, können Sie „Microsoft.DependencyValidation.Analyzers“ direkt im Projektmappen-Explorer entfernen oder diese Warnung unterdrücken. Informationen zum Hinzufügen eines Abhängigkeitsdiagramms finden Sie unter Erstellen von Abhängigkeitsdiagrammen aus dem Code.
DV2002: Nicht zugeordnete Typen Dieses Problem wird gemeldet, wenn ein Codeelement keiner Ebene zugeordnet ist.
DV3001: Fehlender Link Die Ebene LayerName ist mit Artifact verknüpft, das nicht gefunden wurde. Möglicherweise fehlt ein Assemblyverweis.
DV9001: Interne Fehler bei der Architekturvalidierung Die Ergebnisse sind möglicherweise nicht vollständig. Weitere Informationen finden Sie im ausführlichen Buildereignisprotokoll oder im Ausgabefenster.