Megosztás:


Gyakori kérdések a Visual Studióban használt kódelemzésről

Ez a lap válaszokat tartalmaz a Visual Studióban a .NET Compiler platformalapú kódelemzéssel kapcsolatos gyakori kérdésekre.

Kódelemzés és Szerkesztőkonfiguráció

Használnom kell a kódelemzést vagy a Szerkesztőkonfigurációt a kódstílus ellenőrzéséhez?

A kódelemzés és a EditorConfig-fájlok kéz a kézben működnek. Amikor kódstílusokat határoz meg egy Szerkesztőkonfigurációs fájlban vagy a szövegszerkesztő Beállítások lapján, valójában a Visual Studióba beépített kódelemzőket konfigurálja. A EditorConfig-fájlok az elemzőszabályok engedélyezésére vagy letiltására, valamint a NuGet-elemzőcsomagok konfigurálására is használhatók.

Szerkesztőkonfiguráció és szabálykészletek

Konfiguráljam az elemzőket egy szabálykészlet vagy egy EditorConfig-fájl használatával?

A szabálykészletek és a Szerkesztőkonfigurációs fájlok együtt létezhetnek, és mindkettő használható az elemzők konfigurálására. A Szerkesztőkonfigurációs fájlok és szabálykészletek lehetővé teszik a szabályok engedélyezését és letiltását, valamint azok súlyosságának beállítását.

A Visual Studio 2019 16.5-ös és újabb verzióiban azonban a szabálykészletfájlok elavultak a EditorConfig-fájlok javára, és a .NET Core és a .NET 5+ projektek nem támogatják az összes szabálykészlet-menüparancsot. További információ: Meglévő szabálykészletfájl konvertálása Szerkesztőkonfigurációs fájllá.

A Szerkesztőkonfigurációs fájlok további lehetőségeket kínálnak a szabályok konfigurálására:

A szabálykészletek és a Szerkesztőkonfigurációs fájlok mellett egyes elemzők a C# és a VB fordítói számára további fájlként megjelölt szövegfájlok használatával vannak konfigurálva.

Megjegyzés:

  • A EditorConfig-fájlok csak a szabályok engedélyezésére és súlyosságának beállítására használhatók a Visual Studio 2019 16.3-s és újabb verziójában.
  • A Szerkesztőkonfigurációs fájlok nem használhatók az örökölt elemzés konfigurálására, míg a szabálykészletek képesek.

Kódelemzés a folyamatos integrációs (CI) buildekben

Működik a .NET Compiler platformalapú kódelemzés a folyamatos integrációs (CI) buildekben?

Igen. A .NET SDK 5.0-s vagy újabb verziójával vagy Egy NuGet-csomagból telepített elemzők esetében ezek a szabályok a buildeléskor lesznek érvényesítve, beleértve a CI-buildek során is. A CI-ben használt elemzők tiszteletben tartják a szabálykonfigurációt mind a szabálykészletekből, mind a EditorConfig-fájlokból. A .NET 5.0-tól kezdve a Visual Studióba beépített kódstílus-elemzők is szerepelnek a .NET SDK-ban, és ezek többsége végrehajtható egy CI-buildben. További információ: Engedélyezés builden.

IDE-elemzők és StyleCop

Mi a különbség a Visual Studio IDE kódelemzői és a StyleCop-elemzők között?

A Visual Studio IDE beépített elemzőket tartalmaz, amelyek a kódstílussal és a minőségi problémákkal is foglalkoznak. Ezek a szabályok segítenek az új nyelvi funkciók bevezetésében és a kód karbantarthatóságának javításában. Az IDE-elemzők folyamatosan frissülnek minden Visual Studio-kiadással.

A StyleCop-elemzők olyan külső elemzők, amelyek NuGet-csomagként vannak telepítve, és ellenőrzik a stíluskonzisztenciát a kódban. A StyleCop-szabályok általában lehetővé teszik a kódbázis személyes beállításainak megadását anélkül, hogy egy stílust javasolnál a másikhoz.

Kódelemzők és örökölt elemzések

Mi a különbség az örökölt elemzés és a .NET Compiler platformalapú kódelemzés között?

A .NET Compiler platformalapú kódelemzés valós időben és fordítás közben elemzi a forráskódot, míg az örökölt elemzés a bináris fájlokat a build befejezése után elemzi. További információ: .NET Compiler Platform-alapú elemzés és örökölt elemzés.

FxCop-elemzők és .NET-elemzők

Mi a különbség az FxCop-elemzők és a .NET-elemzők között?

Az FxCop-elemzők és a .NET-elemzők egyaránt az FxCop CA-szabályok .NET-fordítóplatformjára ("Roslyn") hivatkoznak. A Visual Studio 2019 16.8 és a .NET 5.0 előtt ezeket az elemzőket NuGet-csomagkéntMicrosoft.CodeAnalysis.FxCopAnalyzers szállították. A Visual Studio 2019 16.8-tól és a .NET 5.0-tól kezdve ezek az elemzők a .NET SDK részét képezik. NuGet-csomagkéntMicrosoft.CodeAnalysis.NetAnalyzers is elérhetők. Fontolja meg az FxCop-elemzőkről a .NET-elemzőkre való migrálást.

Figyelmeztetések kezelése hibákként

A projektem a buildelési lehetőséget használja a figyelmeztetések hibákként való kezelésére. Az örökölt elemzésről a forráskódelemzésre való migrálás után az összes kódelemzési figyelmeztetés hibaként jelenik meg. Hogyan akadályozhatom meg?

Ha meg szeretné akadályozni, hogy a kódelemzési figyelmeztetések hibaként legyenek kezelve, kövesse az alábbi lépéseket:

  1. Hozzon létre egy .props fájlt a következő tartalommal:

    <Project>
       <PropertyGroup>
          <CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
       </PropertyGroup>
    </Project>
    
  2. Adjon hozzá egy sort a .csproj vagy a .vbproj projektfájlhoz az előző lépésben létrehozott .props fájl importálásához. Ezt a sort minden olyan sor elé kell helyezni, amely importálja az elemző .props fájljait. Ha például a .props fájl neve codeanalysis.props:

    ...
    <Import Project="..\..\codeanalysis.props" Condition="Exists('..\..\codeanalysis.props')" />
    <Import Project="..\packages\Microsoft.CodeAnalysis.NetAnalyzers.5.0.0\build\Microsoft.CodeAnalysis.NetAnalyzers.props" Condition="Exists('..\packages\Microsoft.CodeAnalysis.NetAnalyzers.5.0.0\build\Microsoft.CodeAnalysis.NetAnalyzers.props')" />
    ...
    

Kódelemzési megoldás tulajdonságlapja

Hol található a megoldás Kódelemzés tulajdonságlapja?

A megoldás szintjén lévő Kódelemzés tulajdonságlap el lett távolítva a megbízhatóbb megosztott tulajdonságcsoport javára. A kódelemzés projektszintű kezeléséhez a Code Analysis tulajdonságlapja továbbra is elérhető. (Felügyelt projektek esetén azt is javasoljuk, hogy migráljon a szabálykészletekből a Szerkesztőkonfigurációba a szabálykonfigurációhoz.) Ha egy megoldásban vagy adattárban több/minden projektben oszt meg szabálykészleteket, javasoljuk, hogy a CodeAnalysisRuleSet tulajdonsággal rendelkező tulajdonságcsoportot egy megosztott props/targets fájlban vagy a Directory.props/Directory.targets fájlban definiálja . Ha nem rendelkezik olyan gyakori kellékekkel vagy célokkal, amelyeket az összes projekt importál, érdemes lehet hozzáadni egy ilyen tulajdonságcsoportot egy Címtár.props vagy egy Címtár.targets fájlhoz egy legfelső szintű megoldáskönyvtárban, amely automatikusan importálódik a címtárban vagy alkönyvtáraiban definiált összes projektfájlba.