Zuordnen von Abhängigkeiten mit Code Maps

In diesem Artikel erfahren Sie, wie Sie Abhängigkeiten im gesamten Code mit Code Maps visualisieren.

Was sind Code Maps?

In Visual Studio können Sie mithilfe von Code Maps schneller erkennen, wie Ihr Programmcode zusammenhängt, ohne Dateien und Codezeilen zu lesen. Mit diesen Zuordnungen können Sie die Organisation und die Beziehungen in Ihrem Code einschließlich seiner Struktur und seiner Abhängigkeiten sehen, herausfinden, wie Sie ihn aktualisieren und die Kosten für vorgeschlagene Änderungen schätzen.

View dependencies with code maps in Visual Studio

Codeabhängigkeiten können in folgenden Sprachen durch Code Maps dargestellt werden:

  • Visual C# oder Visual Basic in einer Projektmappe oder in Assemblys (.dll oder .exe)

  • Nativer oder verwalteter C- oder C++-Code in Visual C++-Projekten, Headerdateien (.h oder #include) oder Binärdateien

  • Aus .NET-Modulen für Microsoft Dynamics AX erstellte X++-Projekte und X++-Assemblydateien

Hinweis

Für andere als C#- oder Visual Basic-Projekte sind weniger Optionen zum Starten einer Code Map oder zum Hinzufügen von Elementen zu einer vorhanden Code Map verfügbar. Beispielweise können Sie nicht mit der rechten Maustaste auf ein Objekt im Text-Editor eines C++-Projekts klicken, es einer Code Map hinzuzufügen. Sie können jedoch einzelne Codeelemente oder Dateien per Drag & Drop aus dem Projektmappen-Explorer, der Klassenansicht und dem Objektbrowser verschieben.

Voraussetzungen

Um eine Codezuordnung in Visual Studio zu erstellen, installieren Sie zunächst die Komponenten Code Map und Live-Abhängigkeitsüberprüfung

Zum Erstellen und Bearbeiten von Code Maps benötigen Sie Visual Studio Enterprise Edition. In Visual Studio Community- und Professional-Editionen können Sie zwar Diagramme öffnen, die in der Enterprise-Edition generiert wurden, aber nicht bearbeiten.

Hinweis

Vergewissern Sie sich, dass alle Elemente in der Code Map (beispielsweise ausgeblendete Elemente, erweiterte Gruppen und gruppenübergreifende Links) sichtbar sind, bevor Sie in Visual Studio Enterprise erstellte Code Maps für Benutzer von Visual Studio Professional freigeben.

Hinzufügen einer Code Map

Sie können eine leere Code Map erstellen und Elemente darauf ziehen, einschließlich Assemblyverweise, Dateien und Ordnern, oder Sie können eine Code Map für die gesamte oder einen Teil Ihrer Lösung generieren.

So fügen Sie eine leere Code Map hinzu:

  1. Öffnen Sie im Projektmappen-Explorerdas Kontextmenü für den Projektmappenknoten auf oberster Ebene. Wählen Sie Hinzufügen>Neues Element aus.

  2. Wählen Sie im Dialogfeld Neues Element hinzufügen unter Installiert die Kategorie Allgemein aus.

  3. Wählen Sie die Vorlage Directed Graph Document(.dgml) und dann Hinzufügen aus.

    Tipp

    Diese Vorlage wird möglicherweise nicht alphabetisch eingeordnet. Scrollen Sie daher in der Vorlagenliste nach unten, falls sie nicht angezeigt wird.

    Es erscheint nun eine leere Code Map im Ordner Projektmappenelemente der Projektmappe.

Ebenso können Sie eine neue Code Map-Datei erstellen, ohne sie ihrer Projektmappe hinzuzufügen, indem Sie Architektur>Neue Code Map oder Datei>Neu>Datei auswählen.

Weitere Informationen:

Generieren einer Code Map für Ihre Projektmappe

So zeigen Sie alle Abhängigkeiten in Ihrer Projektmappe an:

  1. Wählen Sie in der Menüleiste Architektur>Code Map für Projektmappe generieren aus. Wenn sich ihr Code seit dem letzten Buildvorgang nicht geändert hat, können Sie stattdessen Architektur>Code Map für Projektmappe ohne Erstellung generieren zu erstellen.

    Generate a code map command

    Es wird eine Code Map erstellt, die die Assemblys der obersten Ebene und die Aggregatlinks zwischen diesen zeigt. Desto größer die Aggregatsverbindung, desto mehr Abhängigkeiten stellt sie dar.

  2. Mit der Schaltfläche Legende auf der Symbolleiste der Code Map können Sie die Liste der Projekttypsymbole (z. B. Test, Web und Phone-Projekt), der Codeelemente (z. B. Klassen, Methoden und Eigenschaften) sowie der Beziehungstypen (z. B. Erbt von, Implementiert und Aufrufe) anzeigen oder ausblenden.

    Top-level dependency graph of assemblies

    Diese Beispielprojektmappe enthält Projektmappenordner (Tests und Komponenten), Testprojekte, Webprojekte und Assemblys. Standardmäßig werden alle Einschlussbeziehungen als Gruppendargestellt, die Sie erweitern und reduzieren können. Die Gruppe Extern enthält alle Elemente außerhalb der Projektmappe, einschließlich Plattformabhängigkeiten. Für externe Assemblys werden nur die Elemente angezeigt, die verwendet werden. Standardmäßig werden Systembasistypen auf der Code Map ausgeblendet, um die Übersichtlichkeit zu verbessern.

  3. Um einen Drilldown in der Code Map durchzuführen, erweitern Sie die Gruppen, die Projekte und Assemblys darstellen. Sie können alle Gruppen erweitern, indem Sie durch Drücken von STRG + A alle Knoten auswählen und dann Gruppe, Erweitern im Kontextmenü auswählen.

    Expanding all groups in a code map

  4. Allerdings ist dieses Verfahren für große Projektmappen nicht unbedingt hilfreich. Tatsächlich können Sie bei komplexen Projektmappen aufgrund von Speicherbeschränkungen möglicherweise nicht alle Gruppen erweitern. Erweitern Sie in diesem Fall einen einzelnen Knoten, um seinen Inhalt anzuzeigen. Bewegen Sie den Mauszeiger auf einen Knoten, und klicken Sie dann auf das Chevron (Abwärtspfeil), wenn es angezeigt wird.

    Expanding a node in a code map

    Alternativ können Sie die Tastatur verwenden, indem Sie das Element auswählen und dann die Plus-Taste (+) drücken. Gehen Sie bei Namespaces, Typen und Mitglieder genauso vor, um tiefere Ebenen des Codes untersuchen.

    Tipp

    Weitere Informationen zum Arbeiten mit Code Maps mithilfe von Maus, Tastatur und Toucheingabe finden Sie unter Durchsuchen und Neuanordnen von Code Maps.

  5. Um die Code Map zu vereinfachen und sich auf einzelne Teile zu konzentrieren, wählen Sie Filter auf der Symbolleiste der Code Map aus, und wählen Sie dann nur die Knoten- und Linktypen aus, die für Sie von Interesse sind. Beispielsweise können Sie alle Projektmappenordner und Assemblycontainer ausblenden.

    Simplify the map by filtering containers

    Sie können die Code Map auch vereinfachen, indem Sie einzelne Gruppen und Elemente ausblenden oder aus der Code Map entfernen, ohne dass sich dies auf den zugrunde liegenden Projektmappencode auswirkt.

  6. Um die Beziehungen zwischen Elementen anzuzeigen, wählen Sie die Elemente in der Code Map aus. Die Farben der Links zeigen die Beziehungstypen an, wie im Bereich Legende dargestellt.

    View dependencies across your solutions

    In diesem Beispiel sind die violetten Links Aufrufe, die gepunkteten Links sind Verweise, und die hellblauen Links sind Feldzugriffe. Grüne Links können Vererbung darstellen, oder es kann sich um Aggregatlinks handeln, die mehrere Beziehungstypen (oder Kategorien) angeben.

    Tipp

    Wenn ein grüner Link angezeigt wird, muss dies nicht bedeuten, dass nur eine Vererbungsbeziehung besteht. Möglicherweise gibt es auch Methodenaufrufe, aber diese sind durch die Vererbungsbeziehung ausgeblendet. Um bestimmte Linktypen anzuzeigen, können Sie mit den Kontrollkästchen im Bereich Filter die Typen ausblenden, die für Sie nicht von Interesse sind.

  7. Weitere Informationen zu einem Element oder einem Link erhalten Sie, indem Sie den Mauszeiger darauf bewegen und warten, bis eine QuickInfo angezeigt wird. Diese enthält Details zu einem Codeelement oder den Kategorien, die ein Link darstellt.

    Show the categories of a relationship

  8. Wählen Sie zum Untersuchen von Elementen und Abhängigkeiten, die durch einen Aggregatlink dargestellt werden, zunächst den Link aus, und öffnen Sie dann das zugehörige Kontextmenü. Wählen Sie Zugehörige Links anzeigen (oder Zugehörige Links auf neuer Code Map anzeigen) aus. Hierdurch werden die Gruppen an beiden Enden des Links erweitert und nur die Elemente und Abhängigkeiten angezeigt, die zu dem Link gehören.

  9. Um sich auf bestimmte Teile der Code Map zu konzentrieren, können Sie weitere Elemente entfernen, an denen Sie nicht interessiert sind. Wenn Sie z. B. einen Drillinto für die Klassen- und Memberansicht ausführen möchten, filtern Sie einfach alle Namespaceknoten im Bereich Filter .

    Drilling down to class and member level

  10. Eine andere Methode zum Fokussieren einer Code Map einer komplexen Projektmappe besteht darin, eine neue Code Map zu generieren, die ausgewählte Elemente aus einer vorhandenen Code Map enthält. Halten Sie Strg gedrückt, während Sie die Elemente auswählen, die Sie in den Fokus holen möchten, öffnen Sie das Kontextmenü, und wählen Sie Neues Diagramm aus der Auswahlaus.

    Show selected items on a new code map

  11. Der enthaltende Kontext wird in die neue Code Map übernommen. Blenden Sie Projektmappenordner und andere Container, die nicht angezeigt werden sollen, mithilfe des Bereichs Filter aus.

    Filter the containers to simplify the view

  12. Erweitern Sie die Gruppen, und wählen Sie Elemente in der Code Map aus, um die Beziehungen anzuzeigen.

    Select items to view the relationships

Siehe auch:

Abhängigkeiten anzeigen

Angenommen, Sie müssen eine Codeüberprüfung in einigen Dateien mit ausstehenden Änderungen durchführen. Um die Abhängigkeiten in diesen Änderungen anzuzeigen, können Sie eine Code Map aus diesen Dateien erstellen.

Show specific dependencies on a code map

  1. Wählen Sie im Projektmappen-Explorer alle Projekte, Assemblyverweise, Ordner, Dateien, Typen oder Member aus, die Sie darstellen möchten.

    Select the items you want to map

  2. Wählen Sie auf der Symbolleiste des Projektmappen-Explorers die Schaltfläche Auf Code Map anzeigenCreate New Graph From Selected Nodes Button. Oder öffnen Sie das Kontextmenü für ein Element oder eine Gruppe von Elementen, und wählen Sie Auf Code Map anzeigen aus.

    Sie können auch Elemente aus dem Projektmappen-Explorer, der Klassenansicht oder dem Objektbrowser in eine neue oder vorhandene Code Map ziehen. Um die übergeordnete Hierarchie für die Elemente einzuschließen, halten Sie die Strg-Taste gedrückt, während Sie Elemente ziehen, oder verwenden Sie die Schaltfläche Übergeordnete Elemente einschließen auf der Symbolleiste der Code Map, um die Standardaktion anzugeben. Sie können Assemblydateien auch von außerhalb per Drag n‘ Drop in Visual Studio ziehen, z. B. aus dem Windows-Explorer.

    Hinweis

    Wenn Sie Elemente aus einem Projekt hinzufügen, das von mehreren Apps wie Windows Phone oder Microsoft Store gemeinsam genutzt wird, werden diese Elemente mit dem derzeit aktiven App-Projekt in der Zuordnung angezeigt. Wenn Sie den Kontext für ein anderes App-Projekt ändern und mehrere Elemente aus dem freigegebenen Projekt hinzufügen, werden diese Elemente nun mit dem neuen aktiven App-Projekt angezeigt. Vorgänge, die Sie mit einem Element in der Zuordnung ausführen, gelten nur für solche Elemente, die denselben Kontext gemeinsam verwenden.

  3. Die Code Map zeigt die ausgewählten Elemente in ihren enthaltenden Assemblys.

    Selected items shown as groups on the map

  4. Um Elemente zu untersuchen, erweitern Sie diese. Bewegen Sie den Mauszeiger auf ein Element, und klicken Sie dann auf das Chevron (Abwärtspfeil), wenn es angezeigt wird.

    Expand a node in a code map

    Um alle Elemente zu erweitern, wählen Sie diese mit Strg+A aus, öffnen Sie dann das Kontextmenü für die Code Map, und wählen Sie Gruppe>Erweitern aus. Diese Option ist jedoch nicht verfügbar, wenn das Erweitern aller Gruppen zu einer nicht verwendbaren Code Map oder zu Speicherproblemen führt.

  5. Erweitern Sie weitere Elemente, die für Sie von Interesse sind, bei Bedarf bis hinunter zur Klassen- und Memberebene.

    Expand groups to class and member level

    Um Member anzuzeigen, die im Code enthalten sind, jedoch nicht auf der Code Map angezeigt werden, klicken Sie auf das Symbol Untergeordnete Elemente erneut abrufenRefetch Children Iconin der oberen linken Ecke einer Gruppe.

  6. Um weitere Elemente im Zusammenhang mit den auf der Code Map dargestellten anzuzeigen, wählen Sie ein Element aus, wählen Sie Verwandte anzeigen auf der Symbolleiste der Code Map aus, und wählen Sie dann den Typ verwandter Elemente aus, die der Code Map hinzugefügt werden sollen. Alternativ wählen Sie ein oder mehrere Elemente aus, öffnen Sie das Kontextmenü, und wählen Sie dann die Option Anzeigen für den Typ verwandter Elemente aus, die der Code Map hinzugefügt werden sollen. Zum Beispiel:

    Für eine Assemblywählen Sie Folgendes aus:

    Option BESCHREIBUNG
    Assemblys anzeigen, auf die verwiesen wird Fügt Assemblys hinzu, auf die diese Assembly verweist. Externe Assemblys werden in der Gruppe Extern angezeigt.
    Assemblys anzeigen, die auf diese Funktion verweisen Fügt Assemblys in der Projektmappe hinzu, die auf diese Assembly verweisen.

    Für einen Namespacewählen Sie Enthaltende Assembly anzeigenaus, falls sie nicht sichtbar ist.

    Für eine Klasse oder Schnittstellewählen Sie Folgendes aus:

    Option Beschreibung
    Basistypen anzeigen Fügt einer Klasse die Basisklasse und die implementierten Schnittstellen hinzu.

    Fügt einer Schnittstelle die Basisschnittstellen hinzu.
    Abgeleitete Typen anzeigen Fügt bei einer Klasse die abgeleiteten Klassen hinzu.

    Fügt bei einer Schnittstelle die abgeleiteten Schnittstellen und die implementierenden Klassen oder Strukturen hinzu.
    Typen anzeigen, auf die verwiesen wird Fügt alle Klassen und deren Mitglieder hinzu, die diese Klasse verwendet.
    Typen anzeigen, die auf diese Funktion verweisen Fügt alle Klassen und deren Mitglieder hinzu, die diese Klasse verwenden.
    Enthaltenden Namespace anzeigen Fügt den übergeordneten Namespace hinzu.
    Enthaltende/n Namespace und Assembly anzeigen Fügt die übergeordnete Containerhierarchie hinzu.
    Alle Basistypen anzeigen Fügt die Basisklasse oder die Schnittstellenhierarchie rekursiv hinzu.
    Alle abgeleiteten Typen anzeigen Fügt bei einer Klasse alle abgeleiteten Klassen rekursiv hinzu.

    Fügt bei einer Schnittstelle alle abgeleiteten Schnittstellen und die implementierenden Klassen oder Strukturen rekursiv hinzu.

    Für eine Methodewählen Sie Folgendes aus:

    Option BESCHREIBUNG
    Methode anzeigen, die aufruft Fügt die Methoden hinzu, die diese Methode aufruft.
    Felder anzeigen, auf die verwiesen wird Fügt die Felder hinzu, auf die diese Methode verweist.
    Enthaltenden Typ anzeigen Fügt den übergeordneten Typ hinzu.
    Enthaltende/n Typ, Namespace und Assembly anzeigen Fügt die übergeordnete Containerhierarchie hinzu.
    Überschriebene Methoden anzeigen Fügt bei einer Methode, die andere Methoden überschreibt oder die Methode einer Schnittstelle implementiert, alle abstrakten oder virtuellen Methoden in Basisklassen, die überschrieben werden, und ggf. die Methode der Schnittstelle, die implementiert wird, hinzu.

    Für ein Feld oder eine Eigenschaftwählen Sie Folgendes aus:

    Option BESCHREIBUNG
    Enthaltenden Typ anzeigen Fügt den übergeordneten Typ hinzu.
    Enthaltende/n Typ, Namespace und Assembly anzeigen Fügt die übergeordnete Containerhierarchie hinzu.

    Show methods called by this member

  7. Die Beziehungen werden auf der Code Map angezeigt. In diesem Beispiel werden die von der Find-Methode aufgerufenen Methoden und ihre Position innerhalb oder außerhalb der Projektmappe auf der Map angezeigt.

    Show specific dependencies on a code map

  8. Um die Code Map zu vereinfachen und sich auf einzelne Teile zu konzentrieren, wählen Sie Filter auf der Symbolleiste der Code Map aus, und wählen Sie dann nur die Knoten- und Linktypen aus, die für Sie von Interesse sind. Deaktivieren Sie z. B. die Anzeige von Projektmappenordnern, Assemblys und Namespaces.

    Use the Filter pane to simplify the display