Dela via


Verifiera kod med beroendediagram

Varför ska du använda beroendediagram?

Kontrollera att koden inte är i konflikt med dess design genom att verifiera koden med beroendediagram i Visual Studio. Detta kan hjälpa dig:

  • Hitta konflikter mellan beroenden i din kod och beroenden i beroendediagrammet.

  • Hitta beroenden som kan påverkas av föreslagna ändringar.

    Du kan till exempel redigera beroendediagrammet för att visa potentiella arkitekturändringar och sedan verifiera koden för att se de berörda beroendena.

  • Omstrukturera eller migrera kod till en annan design.

    Hitta kod eller beroenden som kräver arbete när du flyttar koden till en annan arkitektur.

Requirements

  • Visual Studio

    Om du vill skapa ett beroendediagram för ett .NET Core-projekt måste du ha Visual Studio 2019 version 16.2 eller senare.

  • En lösning som har ett modelleringsprojekt med ett beroendediagram. Det här beroendediagrammet måste vara länkat till artefakter i C#- eller Visual Basic-projekt som du vill verifiera. Se Skapa beroendediagram från koden.

Information om vilka utgåvor av Visual Studio som stöder den här funktionen finns i Edition support for architecture and modeling tools (Versionsstöd för arkitektur och modelleringsverktyg).

Du kan verifiera kod manuellt från ett öppet beroendediagram i Visual Studio eller från en kommandotolk. Du kan också verifiera kod automatiskt när du kör lokala versioner eller Azure Pipelines-versioner.

Viktigt!

Om du vill köra lagervalidering med Team Foundation Server (TFS) måste du också installera samma version av Visual Studio på byggservern.

Validering av aktiva beroenden

Beroendeverifiering sker i realtid och fel visas omedelbart i fellistan.

  • Live-validering stöds för C# och Visual Basic.

  • Om du vill aktivera fullständig lösningsanalys när du använder liveberoendeverifiering öppnar du alternativinställningarna från guldfältet som visas i fellistan.

    • Du kan permanent ta bort guldlisten om du inte är intresserad av att se alla arkitekturproblem i din lösning.
    • Om du inte aktiverar fullständig lösningsanalys görs analysen endast för de filer som redigeras.
  • När du uppgraderar projekt för att aktivera liveverifiering visas förloppet för konverteringen i en dialogruta.

  • När du uppdaterar ett projekt för validering av liveberoende uppgraderas versionen av NuGet-paketet till samma för alla projekt och är den högsta versionen som används.

  • När du lägger till ett nytt beroendeverifieringsprojekt utlöses en projektuppdatering.

Se om ett objekt stöder validering

Du kan länka lager till webbplatser, Office-dokument, oformaterade textfiler och filer i projekt som delas mellan flera appar, men valideringsprocessen inkluderar dem inte. Verifieringsfel visas inte för referenser till projekt eller sammansättningar som är länkade till separata lager när inga beroenden visas mellan dessa lager. Sådana referenser betraktas inte som beroenden om inte koden använder dessa referenser.

  1. I beroendediagrammet väljer du ett eller flera lager, högerklickar på ditt val och klickar sedan på Visa länkar.

  2. I Layer Explorer tittar du på kolumnen Stöder validering . Om värdet är falskt stöder objektet inte verifiering.

Inkludera andra .NET-sammansättningar och projekt för validering

När du drar objekt till beroendediagrammet läggs referenser till motsvarande .NET-sammansättningar eller projekt automatiskt till i mappen Lagerreferenser i modelleringsprojektet. Den här mappen innehåller referenser till de sammansättningar och projekt som analyseras under valideringen. Du kan inkludera andra .NET-sammansättningar och projekt för validering utan att manuellt dra dem till beroendediagrammet.

  1. Högerklicka på modellprojektet eller mappen Lagerreferenser i Solution Explorer och klicka sedan på Lägg till referens.

  2. I dialogrutan Lägg till referens väljer du sammansättningarna eller projekten och klickar sedan på OK.

Verifiera koden manuellt

Om du har ett öppet beroendediagram som är länkat till lösningsobjekt kan du köra kommandot Verifiera genväg från diagrammet. Du kan också använda kommandotolken för att köra kommandot msbuild med den anpassade egenskapen /p:ValidateArchitecture inställd på True. När du till exempel gör ändringar i koden utför du lagervalidering regelbundet så att du kan fånga upp beroendekonflikter tidigt.

Verifiera kod från ett öppet beroendediagram

  1. Högerklicka på diagramytan och klicka sedan på Verifiera arkitektur.

    Anmärkning

    Som standard är egenskapen Skapa åtgärd i beroendediagramfilen (.layerdiagram) inställd på Verifiera så att diagrammet ingår i valideringsprocessen.

    Fönstret Fellista rapporterar eventuella fel som inträffar. Mer information om verifieringsfel finns i Felsöka problem med lagerverifiering.

  2. Om du vill visa källan för varje fel dubbelklickar du på felet i fönstret Fellista .

    Anmärkning

    Visual Studio kan visa en kodkarta i stället för källan till felet. Detta inträffar när koden antingen har ett beroende av en sammansättning som inte anges av beroendediagrammet, eller om koden saknar ett beroende som anges av beroendediagrammet. Granska kodkartan eller koden för att avgöra om beroendet ska finnas. Mer information om kodkartor finns i Mappa beroenden mellan dina lösningar.

  3. Information om hur du hanterar fel finns i Lösa lagervalideringsfel.

Verifiera kod i kommandotolken

  1. Öppna Visual Studio-kommandotolken.

  2. Välj något av följande:

    • Om du vill verifiera kod mot ett specifikt modellprojekt i lösningen kör du MSBuild med följande anpassade egenskap.

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

      -or-

      Bläddra till mappen som innehåller modellprojektfilen (.modelproj) och beroendediagrammet och kör sedan MSBuild med följande anpassade egenskap:

      msbuild /p:ValidateArchitecture=true
      
    • Om du vill verifiera kod mot alla modelleringsprojekt i lösningen kör du MSBuild med följande anpassade egenskap:

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

      -or-

      Bläddra till lösningsmappen, som måste innehålla ett modellprojekt som innehåller ett beroendediagram, och kör sedan MSBuild med följande anpassade egenskap:

      msbuild /p:ValidateArchitecture=true
      

      Eventuella fel som inträffar visas. Mer information om MSBuild finns i MSBuild och MSBuild Task.

    Mer information om verifieringsfel finns i Felsöka problem med lagerverifiering.

Hantera valideringsfel

Under utvecklingsprocessen kanske du vill förhindra några av de rapporterade konflikterna under valideringen. Du kanske till exempel vill förhindra fel som du redan hanterar eller som inte är relevanta för ditt specifika scenario. När du undertrycker ett fel är det en god praxis att logga ett arbetsobjekt i Team Foundation.

Varning

Du måste redan vara ansluten till TFS Source Code Control (SCC) för att skapa eller länka till ett arbetsobjekt. Om du försöker öppna en anslutning till en annan TFS SCC stänger Visual Studio den aktuella lösningen automatiskt. Kontrollera att du redan är ansluten till lämplig SCC innan du försöker skapa eller länka till ett arbetsobjekt. I senare versioner av Visual Studio är menykommandona inte tillgängliga om du inte är ansluten till en SCC.

Skapa ett arbetsobjekt för ett valideringsfel

  • I fönstret Fellista högerklickar du på felet, pekar på Skapa arbetsobjekt och klickar sedan på den typ av arbetsobjekt som du vill skapa.

Använd dessa uppgifter för att hantera valideringsfel i fönstret Fellista :

till Följ de här stegen
Ignorera markerade fel under valideringen Högerklicka på ett eller flera markerade fel, peka på Hantera verifieringsfel och klicka sedan på Ignorera fel.

De undertryckta felen visas med genomstrykningsformatering. När du kör verifieringen nästa gång visas inte dessa fel.

Dolda fel spåras i en .suppressions-fil för den motsvarande beroendediagramfilen.
Sluta dämpa valda fel Högerklicka på det markerade utelämnade felet eller felen, peka på Hantera valideringsfel och klicka sedan på Sluta undertrycka fel.

De markerade undertryckta felen visas när du kör verifieringen nästa gång.
Återställa alla undertryckta fel i fönstret Fellista Högerklicka var som helst i fönstret Fellista , peka på Hantera verifieringsfel och klicka sedan på Visa alla undertryckta fel.
Dölj alla undertryckta fel i fönstret Fellista Högerklicka var som helst i fönstret Fellista , peka på Hantera verifieringsfel och klicka sedan på Dölj alla undertryckta fel.

Verifiera kod automatiskt

Du kan utföra lagerverifiering varje gång du kör en lokal version. Om ditt team använder Azure DevOps kan du utföra lagervalidering med gated check-ins, som du kan ange genom att skapa en anpassad MSBuild-uppgift och använda byggrapporter för att samla in verifieringsfel. Information om hur du skapar versioner med gated check-in finns i TFVC gated check-in.

Verifiera kod automatiskt under en lokal version

Använd en textredigerare för att öppna modellprojektfilen (.modelproj) och inkludera sedan följande egenskap:

<ValidateArchitecture>true</ValidateArchitecture>

-eller-

  1. Högerklicka på modellprojektet som innehåller beroendediagrammet eller diagrammen i Solution Explorer och klicka sedan på Egenskaper.

  2. I fönstret Egenskaper anger du modellprojektets egenskap Verifiera arkitektur till True.

    Detta inkluderar modelleringsprojektet i valideringsprocessen.

  3. I Solution Explorer klickar du på den beroendediagramfil (.layerdiagram) som du vill använda för validering.

  4. I fönstret Egenskaper kontrollerar du att diagrammets build action-egenskap är inställd på Verifiera.

    Detta inkluderar beroendediagrammet i valideringsprocessen.

Information om hur du hanterar fel i fönstret Fellista finns i Lösa lagervalideringsfel.

Felsöka problem med lagerverifiering

I följande tabell beskrivs problem med lagerverifiering och deras lösning. De här problemen skiljer sig från fel som beror på konflikter mellan koden och designen. Mer information om dessa fel finns i Felsöka problem med lagerverifiering.

Issue Möjlig orsak Resolution
Valideringsfel inträffar inte som förväntat. Verifieringen fungerar inte på beroendediagram som kopieras från andra beroendediagram i Solution Explorer och som finns i samma modellprojekt. beroendediagram som kopieras på det här sättet innehåller samma referenser som det ursprungliga beroendediagrammet. Lägg till ett nytt beroendediagram i modelleringsprojektet.

Kopiera elementen från källberoendediagrammet till det nya diagrammet.

Åtgärda lagervalideringsfel

När du validerar kod mot ett beroendediagram uppstår verifieringsfel när koden står i konflikt med designen. Följande villkor kan till exempel orsaka valideringsfel:

  • En artefakt tilldelas till fel lager. I det här fallet flyttar du artefakten.

  • En artefakt, till exempel en klass, använder en annan klass på ett sätt som står i konflikt med din arkitektur. I det här fallet omstrukturerar du koden för att ta bort beroendet.

Lös dessa fel genom att uppdatera koden tills inga fler fel visas under verifieringen. Du kan utföra den här uppgiften på ett iterativt sätt.

I följande avsnitt beskrivs syntaxen som används i dessa fel, förklarar innebörden av dessa fel och föreslår vad du kan göra för att lösa eller hantera dem.

Syntax Beskrivning
ArtifactN(ArtifactTypeN) ArtifactN är en artefakt som är associerad med ett lager i beroendediagrammet.

ArtifactTypeN är typen av ArtifactN, till exempel en klass eller metod:

MySolution.MyProject.MyClass.MyMethod(Method)
NamespaceNameN Namnet på ett namnområde.
LayerNameN Namnet på ett lager i beroendediagrammet.
DependencyType Typen av beroenderelation mellan Artifact1 och Artifact2. Artefakt1 har till exempel en anropsrelation med Artifact2.
Felsyntax Felbeskrivning
DV0001: Ogiltigt beroende Det här problemet rapporteras när ett kodelement (namnområde, typ, medlem) som mappas till ett lager refererar till ett kodelement som mappats till ett annat lager, men det inte finns någon beroendepil mellan dessa lager i beroendevalideringsdiagrammet som innehåller dessa lager. Detta är en överträdelse av beroendebegränsningar.
DV1001: Ogiltigt namnområdesnamn Det här problemet rapporteras för ett kodelement som är associerat med ett lager som egenskapen "Tillåtna namnområdesnamn" inte innehåller det namnområde där det här kodelementet definieras. Det här är en överträdelse av namngivningsbegränsningar. Observera att syntaxen för "Tillåtna namnområdesnamn" ska vara en semikolonlista med namnområden där kodelement som är associerade med är lager tillåts definieras.
DV1002: Beroende av oreferensbart namnområde Det här problemet rapporteras för ett kodelement som är associerat med ett lager och refererar till ett annat kodelement som definierats i ett namnområde som definieras i egenskapen "Unreferenceable Namespace" för lagret. Det här är en överträdelse av namngivningsbegränsningar. Observera att egenskapen "Oreferenserbara namnområden" definieras som en semikolonavgränsad lista över namnområden som inte ska refereras till i kodelement som är associerade med det här lagret.
DV1003: Otillåtet namnområdesnamn Det här problemet rapporteras för ett kodelement som är associerat med ett lager som egenskapen "Otillåtna namnområdesnamn" innehåller det namnområde där det här kodelementet definieras. Det här är en överträdelse av namngivningsbegränsningar. Observera att egenskapen "Otillåtet namnområdesnamn" definieras som en semikolonavgränsad lista över namnområden där kodelement som är associerade med det här lagret inte ska definieras.
DV2001: Närvaro av lagerdiagram Det här problemet rapporteras i ett projekt som inte innehåller en beroendediagramfil, men som refererar till analysverktygen för beroendevalidering. Om beroendeverifiering inte har använts kan du ta bort "Microsoft.DependencyValidation.Analyzeers" direkt från Solution Explorer eller utelämna den här varningen. Information om hur du lägger till ett beroendediagram finns i Skapa beroendediagram från din kod.
DV2002: Bas för omappade typer Det här problemet rapporteras när ett kodelement inte mappas till något lager.
DV3001: Länk saknas Layer 'LayerName' länkar till "Artifact" som inte kan hittas. Saknar du en sammansättningsreferens?
DV9001: Arkitekturanalys hittade interna fel Resultaten kanske inte är slutförda. Mer information finns i den detaljerade händelseloggen eller utdatafönstret för bygge.