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

Analyzátory platformy kompilátoru .NET (Roslyn) kontroluly problémy s kvalitou a stylem kódu v jazyce C# nebo Visual Basic kódu. Od verze .NET 5 jsou tyto analyzátory součástí sady .NET SDK a nemusíte je instalovat samostatně. Pokud váš projekt cílí na .NET 5 nebo novější, je analýza kódu ve výchozím nastavení povolená. Pokud váš projekt cílí na jinou implementaci .NET, například .NET Core, .NET Standard nebo .NET Framework, musíte ručně povolit analýzu kódu nastavením vlastnosti EnableNETAnalyzers na true .

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

Poznámka

Analyzátory .NET jsou na cílovém rozhraní agnostické. To znamená, že váš projekt nemusí cílit na konkrétní implementaci .NET. Analyzátory fungují pro projekty, které cílí na .NET 5 nebo novější, stejně jako starší verze .NET, jako je .NET Core 3.1 a .NET Framework 4.7.2. Pokud ale chcete povolit analýzu kódu pomocí vlastnosti EnableNETAnalyzers, váš projekt musí odkazovat na sadu SDK projektu.

Pokud analyzátor našlé porušení pravidel, nahlásil se jako návrh, upozornění nebo chyba v závislosti na tom, jak je každé pravidlo nakonfigurované. Porušení analýzy kódu se zobrazují s předponou "CA" nebo "IDE", aby se odlišili od chyb kompilátoru.

Analýza kvality kódu

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

Tip

Pokud používáte nástroj pro Visual Studio, mnoho pravidel analyzátoru má přidružené opravy kódu, které můžete použít k nápravě problému. Opravy kódu se zobrazují v nabídce ikon žárovky.

Povolená pravidla

Následující pravidla jsou ve výchozím nastavení povolená v rozhraní .NET 6.

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 u OutAttribute řetězcových parametrů pro volání nespravování
CA1418 Vzájemná funkční spolupráce Upozornění Použití platného řetězce platformy
CA1831 Výkon Upozornění Pokud AsSpan je to vhodné, použijte místo indexerů založených na rozsahu řetězec.
CA2013 Spolehlivost Upozornění Nepoužívejte s ReferenceEquals typy hodnot
CA2014 Spolehlivost Upozornění Nepou ít stackalloc ve smyčkách in
CA2015 Spolehlivost Upozornění Nedefinujte finalizační metody pro typy odvozené z MemoryManager<T>
CA2017 Spolehlivost Upozornění Neshoda počtu parametrů
CA2018 Spolehlivost Upozornění Argument count pro by měl Buffer.BlockCopy specifikovat počet bajtů, které se mají zkopírovat.
CA2200 Využití Upozornění Znovu vyvolejte pro zachování podrobností zásobníku
CA2252 Využití Chyba Výslovný souhlas s funkcemi preview
CA2247 Využití Upozornění Argument předaný TaskCompletionSource konstruktoru by měl TaskCreationOptions být enum místo TaskContinuationOptions
CA2255 Využití Upozornění Atribut ModuleInitializer by se neměl používat v knihovnách.
CA2256 Využití Upozornění Všechny členy deklarované v nadřazených rozhraních musí mít implementaci v rozhraní DynamicInterfaceCastableImplementation s atributy -attributed.
CA2257 Využití Upozornění Členy definované v rozhraní s by DynamicInterfaceCastableImplementationAttribute měly být static
CA2258 Využití Upozornění Poskytnutí rozhraní DynamicInterfaceCastableImplementation v Visual Basic se nepodporuje.

Můžete změnit závažnost těchto pravidel a zakázat je nebo je zvýšit na chyby. Můžete také povolit další pravidla.

Povolení dalších pravidel

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

None

Default

Minimum

Recommended

All

Počínaje rozhraním .NET 6 můžete vynechat <AnalysisMode> ve prospěch složené hodnoty pro <AnalysisLevel> vlastnost. Následující hodnota například povoluje doporučenou sadu pravidel pro nejnovější verzi: <AnalysisLevel>latest-Recommended</AnalysisLevel> . Další informace najdete v tématu AnalysisLevel.

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 určitou 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 Microsoft. CodeAnalysis. NetAnalyzers NuGet , aby bylo možné 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ž verze balíčku NuGet. Chcete-li zakázat upozornění, nastavte _SkipUpgradeNetAnalyzersNuGetWarning vlastnost na hodnotu true .

    Poznámka

    pokud nainstalujete balíček Microsoft. CodeAnalysis. NetAnalyzers NuGet, neměli byste přidat vlastnost EnableNETAnalyzers do souboru projektu nebo adresáře. Build. props . když je balíček NuGet nainstalován a EnableNETAnalyzers vlastnost je nastavena na hodnotu true , je vygenerováno 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 rozhraním .NET 5 můžete Povolit analýzu stylu kódu při sestavení, a to na příkazovém řádku a uvnitř 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: pro všechny projekty .net v rámci Visual Studio jako rychlé akce refaktoringu kóduje ve výchozím nastavení povolená 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 SDK a novějších verzí můžete při sestavování z příkazového řádku a v 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 prostředí IDE 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.

spustit analýzu kódu jako akci GitHub

akce dotnet/code-analysis GitHub umožňuje spouštět analyzátory kódu .net jako součást průběžné integrace (CI) v režimu offline. další informace naleznete v tématu akce GitHub analýzy kódu .net.

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é