Přehled analýzy zdrojového kódu .NET
Analyzátory platformy kompilátoru .NET (Roslyn) kontrolují problémy s kvalitou a stylem kódu jazyka C# nebo Visual Basic. Počínaje rozhraním .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 ve výchozím nastavení povolená analýza kódu. 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
hodnotu .
Pokud nechcete přejít na sadu .NET 5+ SDK, máte projekt .NET Framework ve stylu sady .NET Framework nebo preferujte model založený na balíčku NuGet NuGet, jsou analyzátory dostupné také v balíčku NuGet Microsoft.CodeAnalysis.NetAnalyzers. Pro aktualizace verzí na vyžádání můžete preferovat model založený na balíčcích.
Poznámka:
Analyzátory .NET jsou nezávislé na cílovém rozhraní. 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ší a starší verze .NET, jako jsou .NET Core 3.1 a .NET Framework 4.7.2. Chcete-li však povolit analýzu kódu pomocí vlastnosti EnableNETAnalyzers , musí váš projekt odkazovat na sadu SDK projektu.
Pokud analyzátor najde porušení pravidel, zobrazí se v závislosti na konfiguraci jednotlivých pravidel jako návrh, upozornění nebo chyba. Porušení analýzy kódu se zobrazí s předponou CA nebo IDE, aby se odlišila od chyb kompilátoru.
Analýza kvality kódu
Pravidla analýzy kvality kódu (CAxxxx) kontrolují kód jazyka C# nebo Visual Basic a kontrolují 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 nebo novější. Analýzu kódu můžete povolit u projektů, které cílí na starší verze rozhraní .NET, nastavením vlastnosti EnableNETAnalyzers na true
hodnotu . Analýzu kódu projektu můžete také zakázat 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 pro automatické odstranění 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á jako chyby nebo upozornění v .NET 9. Další pravidla jsou povolená jako návrhy.
ID diagnostiky | Kategorie | Závažnost | Přidaná verze | Popis |
---|---|---|---|---|
CA1416 | Vzájemná funkční spolupráce | Upozorňující | .NET 5 | Ověřit kompatibilitu platformy |
CA1417 | Vzájemná funkční spolupráce | Upozorňující | .NET 5 | Nepoužívejte OutAttribute u parametrů řetězce pro volání nespravovaného kódu. |
CA1418 | Vzájemná funkční spolupráce | Upozorňující | .NET 6 | Použití platného řetězce platformy |
CA1420 | Vzájemná funkční spolupráce | Upozorňující | .NET 7 | Použití funkcí, které vyžadují zařazování za běhu, když je zakázané, způsobí výjimky za běhu. |
CA1422 | Vzájemná funkční spolupráce | Upozorňující | .NET 7 | Ověřit kompatibilitu platformy |
CA1831 | Výkon | Upozorňující | .NET 5 | Místo AsSpan indexerů založených na rozsahu pro řetězec použijte, pokud je to vhodné. |
CA1856 | Výkon | Chyba | .NET 8 | Nesprávné použití atributu ConstantExpected |
CA1857 | Výkon | Upozorňující | .NET 8 | Pro parametr se očekává konstanta. |
CA2013 | Spolehlivost | Upozorňující | .NET 5 | Nepoužívejte ReferenceEquals s typy hodnot |
CA2014 | Spolehlivost | Upozorňující | .NET 5 | Nepoužívat stackalloc ve smyčce |
CA2015 | Spolehlivost | Upozorňující | .NET 5 | Nedefinujte finalizační metody pro typy odvozené z MemoryManager<T> |
CA2017 | Spolehlivost | Upozorňující | .NET 6 | Neshoda počtu parametrů |
CA2018 | Spolehlivost | Upozorňující | .NET 6 | Argument count , který má Buffer.BlockCopy určovat počet bajtů, které se mají zkopírovat |
CA2021 | Spolehlivost | Upozorňující | .NET 8 | Nevyvolávat Enumerable.Cast<T> nebo Enumerable.OfType<T> s nekompatibilními typy |
CA2022 | Spolehlivost | Upozorňující | .NET 9 | Vyhněte se neexaktnímu čtení pomocí Stream.Read |
CA2200 | Využití | Upozorňující | .NET 5 | Znovu vyvolejte pro zachování podrobností zásobníku |
CA2247 | Využití | Upozorňující | .NET 5 | Argument předaný konstruktoru TaskCompletionSource by měl být TaskCreationOptions výčt místo TaskContinuationOptions |
CA2252 | Využití | Chyba | .NET 6 | Přihlášení k funkcím ve verzi Preview |
CA2255 | Využití | Upozorňující | .NET 6 | Atribut ModuleInitializer by se neměl používat v knihovnách. |
CA2256 | Využití | Upozorňující | .NET 6 | Všechny členy deklarované v nadřazených rozhraních musí mít implementaci v DynamicInterfaceCastableImplementation rozhraní -attributed. |
CA2257 | Využití | Upozorňující | .NET 6 | Členy definované v rozhraní s DynamicInterfaceCastableImplementationAttribute static |
CA2258 | Využití | Upozorňující | .NET 6 |
DynamicInterfaceCastableImplementation Poskytnutí rozhraní v jazyce Visual Basic není podporováno |
CA2259 | Využití | Upozorňující | .NET 7 |
ThreadStatic má vliv pouze na statická pole. |
CA2260 | Využití | Upozorňující | .NET 7 | Použít správný parametr typu |
CA2261 | Využití | Upozorňující | .NET 8 | Nepoužívejte s ConfigureAwaitOptions.SuppressThrowing Task<TResult> |
CA2264 | Využití | Upozorňující | .NET 9 | Nepředávejte nenulovou hodnotu do ArgumentNullException.ThrowIfNull |
CA2265 | Využití | Upozorňující | .NET 9 | Nerovnávejte se ani Span<T> nerovnávejte null default |
Můžete změnit závažnost těchto pravidel a zakázat je nebo zvýšit jejich úroveň 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.
Povolení dalších pravidel
Režim analýzy odkazuje na předdefinovanou konfiguraci analýzy kódu, kde nejsou povolená žádná, některá nebo všechna pravidla. Ve výchozím režimu analýzy (Default
) je jako upozornění sestavení povolen pouze malý počet pravidel. Režim analýzy projektu můžete změnit nastavením <AnalysisMode>
vlastnosti v souboru projektu. Povolené hodnoty jsou:
Hodnota | Popis |
---|---|
None |
Všechna pravidla jsou zakázaná. Můžete selektivně vyjádřit výslovný souhlas s jednotlivými pravidly, která je povolí. |
Default |
Výchozí režim, kdy jsou určitá pravidla povolená jako upozornění sestavení, jsou určitá pravidla povolená jako návrhy integrovaného vývojového prostředí sady Visual Studio a zbytek je zakázaný. |
Minimum |
Agresivnější režim než Default režim. Některé návrhy, které důrazně doporučujeme pro vynucování sestavení, jsou povolené jako upozornění sestavení. Pokud chcete zjistit, která pravidla zahrnují, zkontrolujte soubor %ProgramFiles%/dotnet/sdk/[version]/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_[level]_minimum.globalconfig. (Pro .NET 7 a starší verze je přípona souboru .editorconfig.) |
Recommended |
Agresivnější režim než Minimum režim, kdy je jako upozornění sestavení povoleno více pravidel. Chcete-li zjistit, jaká pravidla jsou zahrnuta, zkontrolujte soubor %ProgramFiles%/dotnet/sdk/[version]/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_[level]_recommended.globalconfig. (Pro .NET 7 a starší verze je přípona souboru .editorconfig.) |
All |
Všechna pravidla jsou povolená jako upozornění* sestavení. Můžete selektivně vyjádřit výslovný nesouhlas s individuálními pravidly a zakázat je. * Následující pravidla nejsou povolena nastavením AnalysisMode All na : AnalysisLevel latest-all CA1017, CA1045, CA1005, CA1014, CA1060, CA1021 a pravidly analyzátoru metrik kódu (CA1501, CA1502, CA1505, CA1506 a CA1509). Tato starší pravidla můžou být v budoucí verzi zastaralá. Přesto je ale můžete povolit jednotlivě pomocí dotnet_diagnostic.CAxxxx.severity = <severity> položky. |
Můžete také vynechat <AnalysisMode>
ve prospěch složené hodnoty pro <AnalysisLevel>
vlastnost. Například následující hodnota umožňuje doporučenou sadu pravidel pro nejnovější verzi: <AnalysisLevel>latest-Recommended</AnalysisLevel>
. Další informace najdete na webu AnalysisLevel
.
Pokud chcete zjistit výchozí závažnost pro každé dostupné pravidlo a jestli je pravidlo povolené v Default
režimu analýzy, podívejte se na úplný seznam pravidel.
Zacházení s upozorněními jako s chybami
Pokud při sestavování projektů použijete -warnaserror
příznak, budou se všechna upozornění analýzy kódu považovat také za chyby. Pokud nechcete, aby se upozornění na kvalitu kódu (CAxxxx) zacházelo jako s chybami v přítomnosti -warnaserror
, můžete vlastnost MSBuild nastavit CodeAnalysisTreatWarningsAsErrors
v false
souboru projektu.
<PropertyGroup>
<CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>
Stále se zobrazí upozornění analýzy kódu, ale nebudou přerušovat vaše sestavení.
Nejnovější aktualizace
Ve výchozím nastavení získáte nejnovější pravidla analýzy kódu a výchozí závažnosti pravidel při upgradu na novější verze sady .NET SDK. Pokud například nechcete toto chování používat, pokud chcete zajistit, aby nebyla povolena nebo zakázána žádná nová pravidla, můžete ho přepsat jedním z následujících způsobů:
AnalysisLevel
Nastavte vlastnost MSBuild na určitou hodnotu, chcete-li uzamknout upozornění na danou sadu. Když upgradujete na novější sadu SDK, stále se zobrazí opravy chyb pro tato upozornění, ale nebudou povolena žádná nová upozornění a nebudou zakázána žádná existující upozornění. Pokud chcete například uzamknout sadu pravidel na ty, které jsou součástí sady .NET SDK verze 8.0, přidejte do souboru projektu následující položku.<PropertyGroup> <AnalysisLevel>8.0</AnalysisLevel> </PropertyGroup>
Tip
Výchozí hodnota
AnalysisLevel
vlastnosti jelatest
, 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 a oddělte aktualizace pravidel od aktualizací sady .NET SDK. U projektů, které cílí na .NET 5 nebo novější, vypne instalace balíčku integrované analyzátory sady SDK. Pokud sada SDK obsahuje novější verzi sestavení analyzátoru, než je verze balíčku NuGet, zobrazí se upozornění na sestavení sestavení. Chcete-li upozornění zakázat, nastavte
_SkipUpgradeNetAnalyzersNuGetWarning
vlastnost natrue
hodnotu .Poznámka:
Pokud nainstalujete balíček NuGet Microsoft.CodeAnalysis.NetAnalyzers, neměli byste přidat vlastnost EnableNETAnalyzers do souboru projektu nebo do souboru Directory.Build.props . Při instalaci balíčku NuGet a
EnableNETAnalyzers
vlastnost je nastavena natrue
, vygeneruje se upozornění sestavení.
Analýza stylu kódu
Pravidla analýzy stylu kódu (IDExxxx) umožňují definovat a udržovat konzistentní styl kódu v základu kódu. Výchozí nastavení povolení jsou:
Sestavení příkazového řádku: Analýza stylu kódu je ve výchozím nastavení zakázaná pro všechny projekty .NET v sestaveních příkazového řádku.
Analýzu stylu kódu můžete povolit při sestavování, a to jak na příkazovém řádku, tak v sadě Visual Studio. Porušení stylu kódu se zobrazují jako upozornění nebo chyby s předponou IDE. To vám umožní vynucovat konzistentní styly kódu v době sestavení.
Visual Studio: Analýza stylu kódu je ve výchozím nastavení povolená pro všechny projekty .NET v sadě Visual Studio jako refaktoring rychlých akcí kódu.
Úplný seznam pravidel analýzy stylu kódu najdete v tématu Pravidla stylu kódu.
Povolení při sestavení
Analýzu stylu kódu můžete povolit při sestavování z příkazového řádku a v sadě Visual Studio. (Z důvodů výkonu však bude několik pravidel stylu kódu platit pouze v integrovaném vývojovém prostředí sady Visual Studio.)
Pokud chcete povolit analýzu stylu kódu při sestavení, postupujte takto:
Nastavte vlastnost MSBuild EnforceCodeStyleInBuild na
true
.V souboru .editorconfig nakonfigurujte každé pravidlo stylu kódu IDE, které chcete spustit při sestavení jako upozornění nebo chybu. Příklad:
[*.{cs,vb}] # IDE0040: Accessibility modifiers required (escalated to a build warning) dotnet_diagnostic.IDE0040.severity = warning
Tip
Od verze .NET 9 můžete také použít formát možnosti k určení závažnosti a jeho dodržování v době sestavení. Příklad:
[*.{cs,vb}] # IDE0040: Accessibility modifiers required (escalated to a build warning) dotnet_style_require_accessibility_modifiers = always:warning
Případně můžete nakonfigurovat celou kategorii tak, aby byla ve výchozím nastavení upozorněním nebo chybou, a pak v této kategorii selektivně vypnout pravidla, která nechcete spouštět při sestavení. Pří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
Potlačení upozornění
Jedním ze způsobů, jak potlačit porušení pravidla, je nastavit možnost závažnosti pro toto ID pravidla v none
souboru EditorConfig. Příklad:
dotnet_diagnostic.CA1822.severity = none
Další informace a další způsoby potlačení upozornění naleznete 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, Analyzátory XUnit a Sonar Analyzer.