Delen via


Code valideren met afhankelijkheidsdiagrammen

Waarom afhankelijkheidsdiagrammen gebruiken?

Valideer uw code met afhankelijkheidsdiagrammen in Visual Studio om ervoor te zorgen dat de code niet conflicteert met het ontwerp. Dit kan u helpen:

  • Zoek conflicten tussen afhankelijkheden in uw code en afhankelijkheden op het afhankelijkheidsdiagram.

  • Zoek afhankelijkheden die mogelijk worden beïnvloed door voorgestelde wijzigingen.

    U kunt bijvoorbeeld het afhankelijkheidsdiagram bewerken om mogelijke architectuurwijzigingen weer te geven en vervolgens de code valideren om de betrokken afhankelijkheden te zien.

  • Code herstructureren of migreren naar een ander ontwerp.

    Zoek code of afhankelijkheden die werk vereisen wanneer u de code naar een andere architectuur verplaatst.

Requirements

  • Visual Studio

    Als u een afhankelijkheidsdiagram wilt maken voor een .NET Core-project, moet u Visual Studio 2019 versie 16.2 of hoger hebben.

  • Een oplossing met een modelleringsproject met een afhankelijkheidsdiagram. Dit afhankelijkheidsdiagram moet zijn gekoppeld aan artefacten in C# of Visual Basic-projecten die u wilt valideren. Zie Afhankelijkheidsdiagrammen maken op basis van uw code.

Als u wilt zien welke edities van Visual Studio deze functie ondersteunen, raadpleegt u Edition-ondersteuning voor architectuur- en modelleringshulpprogramma's.

U kunt code handmatig valideren vanuit een open afhankelijkheidsdiagram in Visual Studio of vanaf een opdrachtprompt. U kunt code ook automatisch valideren bij het uitvoeren van lokale builds of Azure Pipelines-builds.

Belangrijk

Als u laagvalidatie wilt uitvoeren met Behulp van Team Foundation Server (TFS), moet u ook dezelfde versie van Visual Studio installeren op uw buildserver.

Live-afhankelijkheidsvalidatie

Afhankelijkheidsvalidatie vindt in realtime plaats en fouten worden direct weergegeven in de lijst met fouten.

  • Livevalidatie wordt ondersteund voor C# en Visual Basic.

  • Als u een volledige oplossingsanalyse wilt inschakelen bij het gebruik van live-afhankelijkheidsvalidatie, opent u de opties op de gouden balk die wordt weergegeven in de lijst met fouten.

    • U kunt de gouden balk permanent uitschakelen als u niet geïnteresseerd bent in het bekijken van alle architectonische problemen in uw oplossing.
    • Als u geen volledige oplossingsanalyse inschakelt, wordt de analyse alleen uitgevoerd voor de bestanden die worden bewerkt.
  • Wanneer u projecten upgradet om livevalidatie in te schakelen, wordt in een dialoogvenster de voortgang van de conversie weergegeven.

  • Bij het bijwerken van een project voor live-afhankelijkheidsvalidatie wordt de versie van het NuGet-pakket bijgewerkt zodat deze voor alle projecten hetzelfde is en de hoogste versie in gebruik is.

  • Als u een nieuw afhankelijkheidsvalidatieproject toevoegt, wordt een projectupdate geactiveerd.

Controleren of een item validatie ondersteunt

U kunt lagen koppelen aan websites, Office-documenten, tekstbestanden zonder opmaak en bestanden in projecten die worden gedeeld in meerdere apps, maar het validatieproces bevat deze niet. Validatiefouten worden niet weergegeven voor verwijzingen naar projecten of assembly's die zijn gekoppeld aan afzonderlijke lagen wanneer er geen afhankelijkheden tussen die lagen worden weergegeven. Dergelijke verwijzingen worden niet beschouwd als afhankelijkheden, tenzij de code deze verwijzingen gebruikt.

  1. Selecteer in het afhankelijkheidsdiagram een of meer lagen, klik met de rechtermuisknop op uw selectie en klik vervolgens op Koppelingen weergeven.

  2. Bekijk in Layer Explorer de kolom Ondersteuningsvalidatie . Als de waarde onwaar is, biedt het item geen ondersteuning voor validatie.

Andere .NET-assembly's en projecten voor validatie opnemen

Wanneer u items naar het afhankelijkheidsdiagram sleept, worden verwijzingen naar de bijbehorende .NET-assembly's of projecten automatisch toegevoegd aan de map Layer References in het modelleringsproject. Deze map bevat verwijzingen naar de assembly's en projecten die tijdens de validatie worden geanalyseerd. U kunt andere .NET-assembly's en projecten voor validatie opnemen zonder ze handmatig naar het afhankelijkheidsdiagram te slepen.

  1. Klik in Solution Explorer met de rechtermuisknop op het modelleringsproject of de map Layer References en klik vervolgens op Verwijzing toevoegen.

  2. Selecteer in het dialoogvenster Verwijzing toevoegen de assembly's of projecten en klik op OK.

Code handmatig valideren

Als u een open afhankelijkheidsdiagram hebt dat is gekoppeld aan oplossingsitems, kunt u de opdracht Snelkoppeling valideren vanuit het diagram uitvoeren. U kunt ook de opdrachtprompt gebruiken om de msbuild-opdracht uit te voeren met de aangepaste eigenschap /p:ValidateArchitecture ingesteld op True. Als u bijvoorbeeld wijzigingen aanbrengt in de code, voert u regelmatig laagvalidatie uit, zodat u afhankelijkheidsconflicten vroeg kunt ondervangen.

Code valideren vanuit een open afhankelijkheidsdiagram

  1. Klik met de rechtermuisknop op het diagramoppervlak en klik vervolgens op Architectuur valideren.

    Opmerking

    De eigenschap Build Action voor het bestand afhankelijkheidsdiagram (.layerdiagram) is standaard ingesteld op Valideren , zodat het diagram is opgenomen in het validatieproces.

    In het venster Foutenlijst worden eventuele fouten gerapporteerd. Zie Problemen met laagvalidatie oplossen voor meer informatie over validatiefouten.

  2. Als u de bron van elke fout wilt weergeven, dubbelklikt u op de fout in het venster Foutenlijst .

    Opmerking

    Visual Studio kan een codeoverzicht weergeven in plaats van de bron van de fout. Dit gebeurt wanneer de code een afhankelijkheid heeft van een assembly die niet is opgegeven door het afhankelijkheidsdiagram of als er een afhankelijkheid ontbreekt die is opgegeven door het afhankelijkheidsdiagram. Controleer de codemap of de code om te zien of de afhankelijkheid zou moeten bestaan. Voor meer informatie over codekaarten, zie Map afhankelijkheden in uw oplossingen.

  3. Zie Laagvalidatiefouten oplossen om fouten te beheren.

Code valideren bij de opdrachtprompt

  1. Open de Visual Studio-opdrachtprompt.

  2. Kies een van de volgende opties:

    • Als u code wilt valideren op basis van een specifiek modelleringsproject in de oplossing, voert u MSBuild uit met de volgende aangepaste eigenschap.

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

      – of –

      Blader naar de map met het modelleringsprojectbestand (.modelproj) en het afhankelijkheidsdiagram en voer VERVOLGENS MSBuild uit met de volgende aangepaste eigenschap:

      msbuild /p:ValidateArchitecture=true
      
    • Als u code wilt valideren voor alle modelleringsprojecten in de oplossing, voert u MSBuild uit met de volgende aangepaste eigenschap:

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

      – of –

      Blader naar de oplossingsmap, die een modelleringsproject moet bevatten dat een afhankelijkheidsdiagram bevat en voer VERVOLGENS MSBuild uit met de volgende aangepaste eigenschap:

      msbuild /p:ValidateArchitecture=true
      

      Eventuele fouten die optreden, worden vermeld. Zie MSBuild en MSBuild Task voor meer informatie over MSBuild.

    Zie Problemen met laagvalidatie oplossen voor meer informatie over validatiefouten.

Validatiefouten beheren

Tijdens het ontwikkelingsproces wilt u mogelijk enkele gerapporteerde conflicten tijdens de validatie onderdrukken. U kunt bijvoorbeeld fouten onderdrukken die u al hebt aangepakt of die niet relevant zijn voor uw specifieke scenario. Wanneer u een fout onderdrukt, is het een goed idee om een werkitem in Team Foundation te registreren.

Waarschuwing

U moet al zijn verbonden met TFS Source Code Control (SCC) om een werkitem te maken of er een koppeling naar te maken. Als u probeert een verbinding met een andere TFS SCC te openen, sluit Visual Studio de huidige oplossing automatisch. Zorg ervoor dat u al bent verbonden met de juiste SCC voordat u probeert een werkitem te maken of er een koppeling naar te maken. In latere versies van Visual Studio zijn de menuopdrachten niet beschikbaar als u niet bent verbonden met een SCC.

Een werkitem maken voor een validatiefout

  • Klik in het venster Foutenlijst met de rechtermuisknop op de fout, wijs Werkitem maken aan en klik vervolgens op het type werkitem dat u wilt maken.

Gebruik deze taken om validatiefouten te beheren in het venster Foutenlijst :

Van tot Volg deze stappen
Geselecteerde fouten onderdrukken tijdens validatie Klik met de rechtermuisknop op een of meerdere geselecteerde fouten, wijs validatiefouten beheren aan en klik vervolgens op Fouten onderdrukken.

De onderdrukte fouten worden weergegeven met doorhalen. Wanneer u de validatie de volgende keer uitvoert, worden deze fouten niet weergegeven.

Onderdrukte fouten worden bijgehouden in een onderdrukkingsbestand voor het bijbehorende afhankelijkheidsdiagrambestand.
Stop met het onderdrukken van geselecteerde fouten Klik met de rechtermuisknop op de geselecteerde onderdrukte fout of fouten, wijs validatiefouten beheren aan en klik vervolgens op Fouten onderdrukken stoppen.

De geselecteerde onderdrukte fouten worden weergegeven wanneer u de volgende keer validatie uitvoert.
Alle onderdrukte fouten herstellen in het venster Foutenlijst Klik met de rechtermuisknop op een willekeurige plaats in het venster Foutenlijst , wijs validatiefouten beheren aan en klik vervolgens op Alle onderdrukte fouten weergeven.
Alle onderdrukte fouten verbergen in het venster Foutenlijst Klik met de rechtermuisknop op een willekeurige plaats in het venster Foutenlijst , wijs validatiefouten beheren aan en klik vervolgens op Alle onderdrukte fouten verbergen.

Code automatisch valideren

U kunt laagvalidatie uitvoeren telkens wanneer u een lokale build uitvoert. Als uw team Gebruikmaakt van Azure DevOps, kunt u laagvalidatie uitvoeren met gated check-ins, die u kunt opgeven door een aangepaste MSBuild-taak te maken en buildrapporten te gebruiken om validatiefouten te verzamelen. Als u gated check-in builds wilt maken, raadpleegt u TFVC gated check-in.

Code automatisch valideren tijdens een lokale build

Gebruik een teksteditor om het modelleringsprojectbestand (.modelproj) te openen en voeg vervolgens de volgende eigenschap toe:

<ValidateArchitecture>true</ValidateArchitecture>

-of-

  1. Klik in Solution Explorer met de rechtermuisknop op het modelleringsproject dat het afhankelijkheidsdiagram of de diagrammen bevat en klik vervolgens op Eigenschappen.

  2. Stel in het venster Eigenschappen de eigenschap Validatiearchitectuur van het project in op Waar.

    Dit omvat het modelleringsproject in het validatieproces.

  3. Klik in Solution Explorer op het afhankelijkheidsdiagrambestand (.layerdiagram) dat u wilt gebruiken voor validatie.

  4. Controleer in het venster Eigenschappen of de eigenschap Build Action van het diagram is ingesteld op Valideren.

    Dit omvat het afhankelijkheidsdiagram in het validatieproces.

Zie Laagvalidatiefouten oplossen om fouten in het venster Foutenlijst te beheren.

Problemen met laagvalidatie oplossen

In de volgende tabel worden problemen met laagvalidatie en de oplossing ervan beschreven. Deze problemen verschillen van fouten die het gevolg zijn van conflicten tussen de code en het ontwerp. Zie Problemen met laagvalidatie oplossen voor meer informatie over deze fouten.

Issue Mogelijke oorzaak Resolutie
Validatiefouten treden niet op zoals verwacht. Validatie werkt niet voor afhankelijkheidsdiagrammen die zijn gekopieerd uit andere afhankelijkheidsdiagrammen in Solution Explorer en die zich in hetzelfde modelleringsproject bevinden. afhankelijkheidsdiagrammen die op deze manier worden gekopieerd, bevatten dezelfde verwijzingen als het oorspronkelijke afhankelijkheidsdiagram. Voeg een nieuw afhankelijkheidsdiagram toe aan het modelleringsproject.

Kopieer de elementen van het bronafhankelijkheidsdiagram naar het nieuwe diagram.

Laagvalidatiefouten oplossen

Wanneer u code valideert op basis van een afhankelijkheidsdiagram, treden er validatiefouten op wanneer de code conflicteert met het ontwerp. De volgende voorwaarden kunnen bijvoorbeeld leiden tot validatiefouten:

  • Er wordt een artefact toegewezen aan de verkeerde laag. In dit geval verplaatst u het artefact.

  • Een artefact, zoals een klasse, gebruikt een andere klasse op een manier die conflicteert met uw architectuur. In dit geval herstructureer u de code om de afhankelijkheid te verwijderen.

Als u deze fouten wilt oplossen, werkt u de code bij totdat er geen fouten meer worden weergegeven tijdens de validatie. U kunt deze taak op een iteratieve manier uitvoeren.

In de volgende sectie wordt de syntaxis beschreven die in deze fouten wordt gebruikt, wordt de betekenis van deze fouten uitgelegd en wordt voorgesteld wat u kunt doen om ze op te lossen of te beheren.

Syntax Beschrijving
ArtifactN(ArtifactTypeN) ArtifactN is een artefact dat is gekoppeld aan een laag in het afhankelijkheidsdiagram.

ArtifactTypeN is het type ArtifactN, zoals een klasse of methode, bijvoorbeeld:

MySolution.MyProject.MyClass.MyMethod(Methode)
NamespaceNameN De naam van een naamruimte.
LayerNameN De naam van een laag in het afhankelijkheidsdiagram.
DependencyType Het type afhankelijkheidsrelatie tussen Artifact1 en Artifact2. Artefact1 heeft bijvoorbeeld een Calls relatie met Artifact2.
Foutsyntaxis Foutbeschrijving
DV0001: Ongeldige afhankelijkheid Dit probleem wordt gerapporteerd wanneer een code-element (naamruimte, type, lid) dat is toegewezen aan een laag verwijst naar een code-element dat is toegewezen aan een andere laag, maar er is geen afhankelijkheidspijl tussen deze lagen in het afhankelijkheidsvalidatiediagram met deze lagen. Dit is een schending van de afhankelijkheidsbeperking.
DV1001: Ongeldige naamruimtenaam Dit probleem wordt gerapporteerd voor een code-element dat is gekoppeld aan een laag waarvan de eigenschap "Allowed Namespace Names" de naamruimte waarin dit code-element is gedefinieerd niet bevat. Dit is een schending van de naamgevingsbeperking. De syntaxis van 'Toegestane naamruimtenamen' is een lijst met puntkomma's met naamruimten waarin code-elementen die aan een laag zijn gekoppeld, mogen worden gedefinieerd.
DV1002: Afhankelijkheid van niet-aanroepbare naamruimte Dit probleem wordt gerapporteerd op een code-element dat is gekoppeld aan een laag en verwijst naar een ander code-element dat is gedefinieerd in een naamruimte die is gedefinieerd in de eigenschap Unreferenceable Namespace van de laag. Dit is een schending van de naamgevingsbeperking. Houd er rekening mee dat de eigenschap Unreferenceable Namespaces is gedefinieerd als een door puntkomma's gescheiden lijst met naamruimten waarnaar niet mag worden verwezen in code-elementen die aan deze laag zijn gekoppeld.
DV1003: Naam van naamruimte niet toegestaan Dit probleem wordt gemeld bij een code-element dat is gekoppeld aan een laag waarvan de eigenschap "Verboden Naamruimtenamen" de naamruimte bevat waarin dit code-element is gedefinieerd. Dit is een schending van de naamgevingsbeperking. Houd er rekening mee dat de eigenschap 'Niet-toegestane naamruimten' is vastgesteld als een lijst van naamruimten die door puntkomma's gescheiden is, waarin code-elementen die aan deze laag zijn gekoppeld niet moeten worden gedefinieerd.
DV2001: Aanwezigheid van laagdiagram Dit probleem wordt gerapporteerd in een project dat geen afhankelijkheidsdiagrambestand bevat, maar verwijst naar de afhankelijkheidsvalidatieanalyses. Als afhankelijkheidsvalidatie niet is gebruikt, kunt u 'Microsoft.DependencyValidation.Analyzers' rechtstreeks uit Solution Explorer verwijderen of deze waarschuwing onderdrukken. Zie Afhankelijkheidsdiagrammen maken op basis van uw code om een afhankelijkheidsdiagram toe te voegen.
DV2002: Niet-toegewezen typen basis Dit probleem wordt gerapporteerd wanneer een code-element niet is toegewezen aan een laag.
DV3001: Ontbrekende koppeling Laag 'LayerName' is gekoppeld aan 'artefact' dat niet kan worden gevonden. Ontbreekt er een assemblyreferentie?
DV9001: Architectuuranalyse heeft interne fouten gevonden De resultaten zijn mogelijk niet voltooid. Zie het gedetailleerde gebeurtenislogboek of het uitvoervenster van de build voor meer informatie.