Afhankelijkheden in kaart brengen met codemappen

In dit artikel leert u hoe u afhankelijkheden in uw code kunt visualiseren met codetoewijzingen.

Wat zijn codemaps?

In Visual Studio kunt u met codekaarten sneller zien hoe uw programmacode bij elkaar past zonder bestanden en regels code te lezen. Met deze kaarten kunt u de organisatie en relaties in uw code zien, inclusief de structuur en de afhankelijkheden ervan, hoe u deze kunt bijwerken en de kosten van voorgestelde wijzigingen kunt schatten.

Schermopname van het weergeven van afhankelijkheden met codetoewijzingen in Visual Studio.

U kunt afhankelijkheden toewijzen voor code in deze talen:

  • Visual C# of Visual Basic in een oplossing of assemblies (.dll of .exe)

  • Systeemeigen of beheerde C- of C++-code in Visual C++-projecten, header-bestanden (.h of #include) of binaire bestanden

  • X++ projecten en assembly's gemaakt van .NET-modules voor Microsoft Dynamics AX

Opmerking

Voor andere projecten dan C# of Visual Basic zijn er minder opties voor het starten van een codeoverzicht of het toevoegen van items aan een bestaande codetoewijzing. U kunt bijvoorbeeld niet met de rechtermuisknop op een object in de teksteditor van een C++-project klikken en dit toevoegen aan een codeoverzicht. U kunt echter afzonderlijke code-elementen of bestanden slepen en neerzetten vanuit Solution Explorer, Klasseweergave en Objectbrowser.

Prerequisites

Als u een codetoewijzing wilt maken in Visual Studio, installeert u eerst de onderdelen Codetoewijzing en Live Dependency Validation

Als u codemaps wilt maken en bewerken, hebt u Visual Studio Enterprise edition nodig. In Visual Studio Community- en Professional-edities kunt u echter diagrammen openen die zijn gegenereerd in enterprise-editie, maar u kunt ze niet bewerken.

Opmerking

Voordat u kaarten deelt die zijn gemaakt in Visual Studio Enterprise met anderen die Visual Studio Professional gebruiken, moet u ervoor zorgen dat alle items op de kaart (zoals verborgen items, uitgevouwen groepen en koppelingen tussen groepen) zichtbaar zijn.

Een codeoverzicht toevoegen

U kunt een lege codetoewijzing maken en items ernaar slepen, inclusief assemblyverwijzingen, bestanden en mappen, of u kunt een codekaart genereren voor alle of een deel van uw oplossing.

Een lege codemap toevoegen:

  1. Open in Solution Explorer het snelmenu voor het knooppunt van de oplossing op het hoogste niveau. KiesNieuw item>.

  2. Kies in het dialoogvenster Nieuw item toevoegen onder Geïnstalleerd de categorie Algemeen .

  3. Kies de sjabloon Directed Graph Document(.dgml) en selecteer Vervolgens Toevoegen.

    Tip

    Deze sjabloon wordt mogelijk niet alfabetisch weergegeven, dus schuif omlaag naar de onderkant van de sjabloonlijst als u deze niet ziet.

    Er wordt een lege kaart weergegeven in de map Oplossingsitems van uw oplossing.

Op dezelfde manier kunt u een nieuw codetoewijzingsbestand maken zonder het aan uw oplossing toe te voegen door Architectuur>Nieuw Codetoewijzing of Bestand>Nieuw>Bestand te selecteren.

Meer informatie:

Een codekaart genereren voor uw oplossing

Alle afhankelijkheden in uw oplossing bekijken:

  1. Kies in de menubalk Architectuur>Codekaart genereren voor oplossing. Als uw code niet is gewijzigd sinds de laatste keer dat u deze hebt gebouwd, kunt u in plaats daarvan Architectuur>Code Map voor Oplossing Genereren Zonder Bouwen selecteren.

    Schermopname van de opdracht Een codeoverzicht voor oplossing genereren.

    Er wordt een kaart gegenereerd waarin de assembly's op het hoogste niveau en geaggregeerde koppelingen tussen deze assembly's worden weergegeven. Hoe breder de aggregatieskoppeling, hoe meer afhankelijkheden deze vertegenwoordigt.

  2. Gebruik de knop Legenda op de werkbalk van de codekaart om de lijst met projecttypepictogrammen (zoals Test, Web en Phone Project), code-items (zoals klassen, methoden en eigenschappen) en relationele typen (zoals Overgenomen van, Implementeren en Aanroepen) weer te geven of te verbergen.

    Schermopname van een afhankelijkheidsgrafiek op het hoogste niveau van assembly's.

    Deze voorbeeldoplossing bevat oplossingsmappen (tests en onderdelen), testprojecten, webprojecten en assembly's. Standaard worden alle insluitingsrelaties weergegeven als groepen, die u kunt uitvouwen en samenvouwen. De groep Externals bevat alles buiten uw oplossing, inclusief platformafhankelijkheden. Externe assemblages tonen alleen de items die worden gebruikt. Systeembasistypen worden standaard verborgen op de kaart om de rommel te verminderen.

  3. Als u wilt inzoomen in de kaart, vouwt u de groepen uit die projecten en assemblages vertegenwoordigen. U kunt alles uitvouwen door op Ctrl+A te drukken om alle knooppunten te selecteren en vervolgens Groep te kiezen, Uitvouwen in het snelmenu.

    Schermopname van alle groepen die zijn uitgevouwen in een codekaart.

  4. Dit kan echter niet nuttig zijn voor een grote oplossing. In feite kunnen geheugenbeperkingen voor complexe oplossingen verhinderen dat u alle groepen uitbreidt. Vouw het uit als u in een afzonderlijk knooppunt wilt zien. Beweeg de muisaanwijzer bovenop het knooppunt en klik op de chevron (pijltje omlaag) wanneer deze wordt weergegeven.

    Schermopname die laat zien hoe u een knooppunt in een codeoverzicht uitvouwt.

    Of gebruik het toetsenbord door het item te selecteren en vervolgens op de plustoets (+) te drukken. Als u diepere codeniveaus wilt verkennen, doet u hetzelfde voor naamruimten, typen en leden.

    Tip

    Zie Bladeren en codekaarten opnieuw ordenen voor meer informatie over het werken met codekaarten met behulp van de muis, het toetsenbord en het aanraken.

  5. Als u de kaart wilt vereenvoudigen en zich wilt richten op afzonderlijke onderdelen, kiest u Filters op de werkbalk van de codekaart en selecteert u alleen de typen knooppunten en koppelingen waarin u geïnteresseerd bent. U kunt bijvoorbeeld alle oplossingsmap- en assemblycontainers verbergen.

    Schermopname die laat zien hoe u een kaart vereenvoudigt door containers te filteren.

    U kunt de kaart ook vereenvoudigen door afzonderlijke groepen en items van de kaart te verbergen of te verwijderen, zonder dat dit van invloed is op de onderliggende oplossingscode.

  6. Als u de relaties tussen items wilt zien, selecteert u deze op de kaart. De kleuren van de koppelingen geven de typen relaties aan, zoals wordt weergegeven in het deelvenster Legenda .

    Schermopname van het weergeven van afhankelijkheden tussen oplossingen.

    In dit voorbeeld zijn de paarse koppelingen aanroepen, de gestippelde koppelingen verwijzingen en de lichtblauwe koppelingen zijn veldtoegang. Groene koppelingen kunnen overname zijn, of ze kunnen samengevoegde koppelingen zijn die meer dan één type relatie (of categorie) aangeven.

    Tip

    Als u een groene koppeling ziet, betekent dit mogelijk niet dat er alleen een overnamerelatie is. Er kunnen ook methode-aanroepen zijn, maar deze worden verborgen door de erfelijkheidsrelatie. Als u specifieke typen koppelingen wilt zien, gebruikt u de selectievakjes in het deelvenster Filters om de typen te verbergen waarin u niet geïnteresseerd bent.

  7. Als u meer informatie wilt over een item of koppeling, verplaatst u de aanwijzer erboven totdat er knopinfo wordt weergegeven. Hier ziet u details van een code-element of de categorieën die een koppeling vertegenwoordigt.

    Schermopname van de categorieën van een relatie.

  8. Als u items en afhankelijkheden wilt onderzoeken die worden vertegenwoordigd door een statistische koppeling, selecteert u eerst de koppeling en opent u vervolgens het bijbehorende snelmenu. Kies Bijdragende koppelingen weergeven (of Bijdragende koppelingen weergeven op nieuwe codekaart). Hiermee worden de groepen aan beide uiteinden van de koppeling uitgebreid en worden alleen die items en afhankelijkheden weergegeven die deelnemen aan de koppeling.

  9. Als u zich wilt richten op specifieke delen van de kaart, kunt u items blijven verwijderen waarin u niet geïnteresseerd bent. Als u bijvoorbeeld wilt inzoomen op de klasse- en lidweergave, filtert u alle naamruimteknooppunten in het deelvenster Filters .

    Schermopname die laat zien hoe u inzoomt op klasse- en lidniveau.

  10. Een andere manier om u te richten op een complexe oplossingskaart is door een nieuwe kaart te genereren die geselecteerde items van een bestaande kaart bevat. Houd Ctrl ingedrukt terwijl u de items selecteert waarop u zich wilt richten, opent u het snelmenu en kiest u Nieuwe grafiek in Selectie.

    Schermopname van het weergeven van geselecteerde items op een nieuwe codekaart.

  11. De bevatde context wordt overgedragen naar de nieuwe kaart. Verberg oplossingsmappen en andere containers die u niet wilt zien met behulp van het deelvenster Filters .

    Schermopname van het filteren van containers om de weergave te vereenvoudigen.

  12. Vouw de groepen uit en selecteer items in de kaart om de relaties weer te geven.

    Schermopname van het selecteren van items om de relaties weer te geven.

Zie ook:

Afhankelijkheden weergeven

Stel dat u een codebeoordeling hebt die moet worden uitgevoerd in sommige bestanden met wijzigingen die in behandeling zijn. Als u de afhankelijkheden in deze wijzigingen wilt zien, kunt u een codetoewijzing maken op basis van die bestanden.

Schermopname van afhankelijkheden op een codekaart.

  1. Sleep items uit Solution Explorer, Class View of Object Browser naar een nieuwe of bestaande codekaart. Als u de bovenliggende hiërarchie voor uw items wilt opnemen, houdt u Ctrl ingedrukt terwijl u items sleept, of gebruikt u de knop Include Parents op de werkbalk van de code map om de standaardactie op te geven. U kunt ook assemblybestanden van buiten Visual Studio slepen, zoals vanuit Windows Verkenner.

    Opmerking

    Wanneer u items toevoegt uit een project dat wordt gedeeld in meerdere apps, zoals Windows Phone of Microsoft Store, worden deze items weergegeven op de kaart met het huidige actieve app-project. Als u de context wijzigt in een ander app-project en meer items uit het gedeelde project toevoegt, worden deze items nu weergegeven met het nieuw actieve app-project. Bewerkingen die u uitvoert met een item op de kaart, zijn alleen van toepassing op items die dezelfde context delen.

  2. Op de kaart worden de geselecteerde items binnen hun samenstellingen weergegeven.

    Schermopname van items als groepen op een kaart.

  3. Als u items wilt verkennen, vouwt u deze uit. Beweeg de muisaanwijzer boven een item en klik vervolgens op het pijl-omlaag pictogram wanneer het wordt weergegeven.

    Schermopname die de pijl toont voor het toevoegen van onderliggende items.

    Als u alle items wilt uitvouwen, selecteert u deze met Ctrl+A, opent u het snelmenu voor de kaart en kiest u Groep>uitvouwen. Echter, deze optie is niet beschikbaar wanneer het uitbreiden van alle groepen leidt tot een onbruikbare kaart of geheugenproblemen.

  4. Ga door met het uitbreiden van items waarin u geïnteresseerd bent, zo nodig tot aan het niveau van de klas en het lid.

    Schermopname die groepen weergeeft op het niveau van de klasse en haar leden.

    Als u leden wilt zien die zich in de code bevinden, maar niet op de kaart worden weergegeven, klikt u op het pictogram Refetch ChildrenRefetch Children in de linkerbovenhoek van een groep.

  5. Als u meer items wilt zien die zijn gerelateerd aan items op de kaart, selecteert u er een en kiest u Gerelateerd weergeven op de werkbalk van de codekaart en selecteert u vervolgens het type gerelateerde items dat u aan de kaart wilt toevoegen. U kunt ook een of meer items selecteren, het snelmenu openen en vervolgens de optie Weergeven kiezen voor het type gerelateerde items dat u aan de kaart wilt toevoegen. Voorbeeld:

    Kies voor een assembly:

    Option Beschrijving
    Assemblies weergeven waarnaar verwezen wordt Voeg assemblies toe waar deze assembly naar verwijst. Externe assemblies verschijnen in de groep Externals.
    Assemblies weergeven die hiernaar verwijzen Voeg assemblies toe binnen de oplossing die naar deze assembly verwijzen.

    Voor een naamruimte, kiest u Toon bijbehorende assembly als het niet zichtbaar is.

    Kies voor een klasse of interface:

    Option Beschrijving
    Basistypen weergeven Voeg voor een klasse de basisklasse en de geïmplementeerde interfaces toe.

    Voor een interface voegt u de basisinterfaces toe.
    Afgeleide typen weergeven Voeg voor een klasse de afgeleide klassen toe.

    Voeg voor een interface de afgeleide interfaces en de implementatieklassen of structs toe.
    Toon typen van deze verwijzingen Voeg alle klassen en hun leden toe die door deze klasse worden gebruikt.
    Typen weergeven waarnaar wordt verwezen Voeg alle klassen en hun leden toe die deze klasse gebruiken.
    Toon bevattende naamruimte Voeg de bovenliggende naamruimte toe.
    Weergeven met naamruimte en assembly Voeg de bovenliggende containerhiërarchie toe.
    Alle basistypen weergeven Voeg recursief de basisklasse of interfacehiërarchie toe.
    Alle afgeleide typen weergeven Voeg voor een klasse alle afgeleide klassen recursief toe.

    Voeg voor een interface alle afgeleide interfaces en implementeer-klassen of -structen recursief toe.

    Kies voor een methode:

    Option Beschrijving
    Toon methoden die door deze worden aangeroepen Voeg methoden toe die met deze methode worden aangeroepen.
    Toon velden waarnaar wordt verwezen Voeg velden toe waarnaar deze methode verwijst.
    Bevattende type weergeven Voeg het bovenliggende type toe.
    Weergeven met type, naamruimte en assembly Voeg de bovenliggende containerhiërarchie toe.
    Overschreven methoden weergeven Voor een methode die andere methoden overschrijft of de methode van een interface implementeert, voegt u alle abstracte of virtuele methoden toe in basisklassen die worden overschreven en, indien van toepassing, de methode van de interface die wordt geïmplementeerd.

    Kies voor een veld of eigenschap:

    Option Beschrijving
    Type met inhoud weergeven Voeg het bovenliggende type toe.
    Weergeven met type, naamruimte en assembly Voeg de bovenliggende containerhiërarchie toe.

    Schermopname van de opdracht voor het weergeven van methoden.

  6. Op de kaart worden de relaties weergegeven. In dit voorbeeld toont de kaart de methoden die worden aangeroepen door de Find methode en de locatie ervan in de oplossing of extern.

    Schermopname van specifieke afhankelijkheden op een codekaart.

  7. Als u de kaart wilt vereenvoudigen en zich wilt richten op afzonderlijke onderdelen, kiest u Filters op de werkbalk van de codekaart en selecteert u alleen de typen knooppunten en koppelingen waarin u geïnteresseerd bent. Schakel bijvoorbeeld de weergave van oplossingsmappen, assembly's en naamruimten uit.

    Schermopname van de filteropties voor het vereenvoudigen van de weergave.