Přehled analýzy zdrojového kódu .NET

Analyzátory .NET Compiler Platform (Roslyn) kontrolují kód v jazyce C# nebo Visual Basic pro problémy s kvalitou kódu a stylem. Od rozhraní .NET 5,0 jsou tyto analyzátory součástí sady .NET SDK a nemusíte je instalovat samostatně. Pokud je projekt cílen na rozhraní .NET 5 nebo novější, je ve výchozím nastavení povolena analýza kódu. Pokud je projekt cílen na jinou implementaci rozhraní .NET, například .NET Core, .NET Standard nebo .NET Framework, je nutné ručně povolit analýzu kódu nastavením vlastnosti EnableNETAnalyzers na hodnotu true .

Pokud nechcete přejít na sadu .NET 5 + SDK, máte .NET Framework projekt, který není ve stylu sady SDK, nebo preferovat model založený na balíčku NuGet, analyzátory jsou také k dispozici v balíčku NuGet Microsoft. CodeAnalysis. NetAnalyzers. Můžete upřednostnit model založený na balíčku pro aktualizace verze na vyžádání.

Poznámka

Analyzátory .NET jsou Target-Framework nezávislá. To znamená, že váš projekt nemusí cílit na konkrétní implementaci rozhraní .NET. Analyzátory fungují pro projekty, které cílí net5.0 i na starší verze rozhraní .NET, například netcoreapp3.1 a net472 . Chcete-li však povolit analýzu kódu pomocí vlastnosti EnableNETAnalyzers , projekt musí odkazovat na projektovou sadu SDK.

Pokud analyzátory naleznou porušení pravidel, nahlásí se jako návrh, varování nebo chyba v závislosti na konfiguracikaždého pravidla. U porušení analýzy kódu se zobrazí předpona "CA" nebo "IDE", aby byly odlišeny od chyb kompilátoru.

Analýza kvality kódu

Pravidla analýzy kvality kódu ("CAxxxx") kontrolují kód v jazyce C# nebo Visual Basic pro zabezpečení, výkon, návrh a další problémy. Analýza je ve výchozím nastavení povolená pro projekty, které cílí na .NET 5,0 nebo novější. Můžete povolit analýzu kódu pro projekty, které cílí na starší verze rozhraní .NET, nastavením vlastnosti EnableNETAnalyzers na true . Můžete také zakázat analýzu kódu pro projekt nastavením EnableNETAnalyzers na false .

Tip

Pokud používáte Visual Studio:

  • Mnoho pravidel analyzátoru má přidružené opravy kódu , které můžete použít k opravě problému. Opravy kódu se zobrazují v nabídce ikony žárovky.
  • Můžete povolit nebo zakázat analýzu kódu kliknutím pravým tlačítkem myši na projekt v Průzkumník řešení a kliknutím na kartu vlastnosti > analýzy kódu > Povolit analyzátory .NET.

Povolená pravidla

Následující pravidla jsou ve výchozím nastavení povolena v rozhraní .NET 5,0.

ID diagnostiky Kategorie Závažnost Popis
CA1416 Vzájemná funkční spolupráce Upozornění Analyzátor kompatibility platformy
CA1417 Vzájemná funkční spolupráce Upozornění Nepoužívejte OutAttribute v parametrech řetězce pro volání nespravovaného volání.
CA1831 Výkon Upozornění Použijte AsSpan místo indexerů založeného na rozsahu pro řetězec, pokud je to vhodné.
CA2013 Spolehlivost Upozornění Nepoužívat ReferenceEquals s typy hodnot
CA2014 Spolehlivost Upozornění Nepoužívat stackalloc ve smyčkách
CA2015 Spolehlivost Upozornění Nedefinujte finalizační metody pro typy odvozené z MemoryManager<T>
CA2200 Využití Upozornění Znovu vyvolejte pro zachování podrobností zásobníku
CA2247 Využití Upozornění Argument předaný konstruktoru TaskCompletionSource by měl být TaskCreationOptions Enum místo TaskContinuationOptions

Závažnost těchto pravidel můžete změnit, chcete-li je zakázat nebo zvýšit na chyby. Můžete také Povolit další pravidla.

  • Seznam pravidel, která jsou součástí každé verze sady .NET SDK, najdete v tématu verze analyzátoru.
  • Seznam všech pravidel kvality kódu najdete v tématu pravidla kvality kódu.

Povolit další pravidla

Režim analýzy odkazuje na předdefinovanou konfiguraci analýzy kódu, pokud nejsou povolena žádná, některá nebo všechna pravidla. Ve výchozím režimu analýzy je jako upozornění sestavení povolenpouze malý počet pravidel. Můžete změnit režim analýzy pro svůj projekt nastavením <AnalysisMode> vlastnosti v souboru projektu. Povolené hodnoty jsou:

Hodnota Popis
AllDisabledByDefault Toto je nejpohodlnější režim. Všechna pravidla jsou ve výchozím nastavení zakázána. Pokud je chcete povolit, můžete si selektivně odhlásit na jednotlivá pravidla.

<AnalysisMode>AllDisabledByDefault</AnalysisMode>
AllEnabledByDefault Toto je nejagresivní režim. Všechna pravidla jsou povolena jako upozornění sestavení. Můžete selektivně odsouhlasit jednotlivá pravidla, abyste je zakázali.

<AnalysisMode>AllEnabledByDefault</AnalysisMode>
Default Výchozí režim, kde jsou několik pravidla povolena jako upozornění, ostatní jsou povoleny pouze jako návrhy sady Visual Studio IDE s odpovídajícími opravami kódu a zbytek je zcela zakázán. Můžete selektivně odsouhlasit nebo odvolat jednotlivá pravidla, abyste je zakázali.

<AnalysisMode>Default</AnalysisMode>

Pro vyhledání výchozí závažnosti pro každé dostupné pravidlo a bez ohledu na to, jestli je pravidlo povolené ve výchozím režimu analýzy, se podívejte na úplný seznam pravidel.

Zpracovávat upozornění jako chyby

Použijete-li -warnaserror příznak při sestavování projektů, všechna upozornění analýzy kódu jsou také považována za chyby. Pokud nechcete, aby upozornění kvality kódu (CAxxxx) byla považována za chyby v přítomnosti -warnaserror , můžete nastavit CodeAnalysisTreatWarningsAsErrors vlastnost MSBuild na false v souboru projektu.

<PropertyGroup>
  <CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>

Pořád se zobrazí všechna upozornění analýzy kódu, ale nedojde k přerušení sestavení.

Nejnovější aktualizace

Ve výchozím nastavení získáte nejnovější pravidla analýzy kódu a výchozí závažnost pravidla při upgradu na novější verze sady .NET SDK. Pokud nechcete toto chování, například pokud chcete zajistit, aby žádná nová pravidla nebyla povolená nebo zakázaná, můžete ji přepsat jedním z následujících způsobů:

  • Nastavte AnalysisLevel vlastnost MSBuild na konkrétní hodnotu pro uzamknutí upozornění na danou sadu. Při upgradu na novější sadu SDK stále získáte opravy chyb pro tato upozornění, ale nebudou povolena žádná nová upozornění a nebudou zakázána žádná stávající upozornění. Chcete-li například uzamknout sadu pravidel na ty, které jsou dodávány s verzí 5,0 sady .NET SDK, přidejte následující položku do souboru projektu.

    <PropertyGroup>
      <AnalysisLevel>5.0</AnalysisLevel>
    </PropertyGroup>
    

    Tip

    Výchozí hodnota pro AnalysisLevel vlastnost je latest , což znamená, že při přechodu na novější verze sady .NET SDK vždy získáte nejnovější pravidla analýzy kódu.

    Další informace a zobrazení seznamu možných hodnot naleznete v tématu AnalysisLevel.

  • Nainstalujte balíček NuGet Microsoft. CodeAnalysis. NetAnalyzers , který bude oddělit aktualizace pravidel od aktualizací sady .NET SDK. Pro projekty, které cílí na .NET 5 +, instalace balíčku vypne integrované analyzátory SDK. Zobrazí se upozornění sestavení, pokud sada SDK obsahuje novější verzi sestavení analyzátoru než balíček NuGet. Chcete-li zakázat upozornění, nastavte _SkipUpgradeNetAnalyzersNuGetWarning vlastnost na hodnotu true .

    Poznámka

    Pokud nainstalujete balíček NuGet Microsoft. CodeAnalysis. NetAnalyzers, neměli byste přidat vlastnost EnableNETAnalyzers do souboru projektu nebo adresáře. Build. props . Když je balíček NuGet nainstalovaný a EnableNETAnalyzers vlastnost je nastavená na true , vygeneruje se upozornění sestavení.

Analýza stylu kódu

Pravidla analýzy kódu ("IDExxxx") umožňují definovat a udržovat konzistentní styl kódu v základu kódu. Výchozí nastavení pro povolení jsou:

  • Sestavení příkazového řádku: analýza ve stylu kódu je ve výchozím nastavení zakázána pro všechny projekty .NET na sestavení příkazového řádku.

    Počínaje platformou .NET 5,0 můžete Povolit analýzu stylu kódu při sestavení, a to jak v příkazovém řádku, tak v rámci sady Visual Studio. Porušení stylu kódu se zobrazí jako upozornění nebo chyby s předponou "IDE". To umožňuje vymáhat konzistentní styly kódu v době sestavení.

  • Visual Studio: ve výchozím nastavení je pro všechny projekty .NET v rámci sady Visual Studio pro rychlé akce refaktoringu kódupovolená analýza stylu kódu.

Úplný seznam pravidel analýzy ve stylu kódu naleznete v tématu pravidla stylu kódu.

Povolit při sestavení

Pomocí sady .NET 5,0 SDK a novějších verzí můžete při sestavování z příkazového řádku a v sadě Visual Studio povolit analýzu stylu kódu. (Nicméně z důvodů výkonu se několik pravidla stylu kódu pořád použijí pouze v integrovaném vývojovém prostředí sady Visual Studio.)

Použijte následující postup, chcete-li povolit analýzu stylu kódu při sestavení:

  1. Nastavte vlastnost MSBuild EnforceCodeStyleInBuild na true .

  2. V souboru . editorconfig nakonfigurujte každé pravidlo pro styl kódu "IDE", které chcete spustit při sestavování, jako upozornění nebo chybu. Například:

    [*.{cs,vb}]
    # IDE0040: Accessibility modifiers required (escalated to a build warning)
    dotnet_diagnostic.IDE0040.severity = warning
    

    Případně můžete nakonfigurovat celou kategorii jako varování nebo chybu, ve výchozím nastavení a pak selektivně vypnout pravidla v této kategorii, která nechcete spouštět při sestavování. Například:

    [*.{cs,vb}]
    
    # Default severity for analyzer diagnostics with category 'Style' (escalated to build warnings)
    dotnet_analyzer_diagnostic.category-Style.severity = warning
    
    # IDE0040: Accessibility modifiers required (disabled on build)
    dotnet_diagnostic.IDE0040.severity = silent
    

Poznámka

Funkce analýzy ve stylu kódu je experimentální a může se měnit mezi verzemi rozhraní .NET 5 a .NET 6.

Potlačit upozornění

Jedním ze způsobů, jak potlačit porušení pravidel, je nastavit možnost závažnosti pro toto ID pravidla na none v souboru EditorConfig. Například:

dotnet_diagnostic.CA1822.severity = none

Další informace a další způsoby, jak potlačit upozornění, najdete v tématu jak potlačit upozornění analýzy kódu.

Analyzátory jiných výrobců

Kromě oficiálních analyzátorů .NET můžete také nainstalovat analyzátory třetích stran, jako jsou StyleCop, Roslynator, XUnit analyzersa sonar Analyzer.

Viz také