Översikt över .NET-källkodsanalys
.NET-kompilatorplattformsanalyserare (Roslyn) inspekterar din C#- eller Visual Basic-kod för kodkvalitets- och formatproblem. Från och med .NET 5 ingår dessa analysverktyg i .NET SDK och du behöver inte installera dem separat. Om projektet är avsett för .NET 5 eller senare aktiveras kodanalys som standard. Om projektet är inriktat på en annan .NET-implementering, till exempel .NET Core, .NET Standard eller .NET Framework, måste du aktivera kodanalys manuellt genom att ange egenskapen EnableNETAnalyzers till true
.
Om du inte vill flytta till .NET 5+ SDK, ha ett .NET Framework-projekt i icke-SDK-format eller föredrar en NuGet-paketbaserad modell är analysverktygen också tillgängliga i NuGet-paketet Microsoft.CodeAnalysis.NetAnalyzers. Du kanske föredrar en paketbaserad modell för versionsuppdateringar på begäran.
Kommentar
.NET-analysverktyg är målramverksagnostiska. Det innebär att projektet inte behöver rikta in sig på en specifik .NET-implementering. Analysverktygen fungerar för projekt som riktar in sig på .NET 5+ samt tidigare .NET-versioner, till exempel .NET Core 3.1 och .NET Framework 4.7.2. Men för att aktivera kodanalys med egenskapen EnableNETAnalyzers måste projektet referera till ett projekt-SDK.
Om regelöverträdelser hittas av en analysator rapporteras de som ett förslag, en varning eller ett fel, beroende på hur varje regel konfigureras. Kodanalysöverträdelser visas med prefixet "CA" eller "IDE" för att skilja dem från kompilatorfel.
Kodkvalitetsanalys
Regler för kodkvalitetsanalys ("CAxxxx") inspekterar din C#- eller Visual Basic-kod för säkerhet, prestanda, design och andra problem. Analysen är som standard aktiverad för projekt som är inriktade på .NET 5 eller senare. Du kan aktivera kodanalys för projekt som riktar in sig på tidigare .NET-versioner genom att ange egenskapen EnableNETAnalyzers till true
. Du kan också inaktivera kodanalys för projektet genom att ange EnableNETAnalyzers
till false
.
Dricks
Om du använder Visual Studio har många analysregler associerade kodkorrigeringar som du kan använda för att åtgärda problemet. Kodkorrigeringar visas i menyn med glödlampans ikon.
Aktiverade regler
Följande regler aktiveras som standard som fel eller varningar i .NET 9. Ytterligare regler aktiveras som förslag.
Diagnostik-ID | Kategori | Allvarlighet | Version har lagts till | beskrivning |
---|---|---|---|---|
CA1416 | Samverkan | Varning | .NET 5 | Verifiera plattformskompatibilitet |
CA1417 | Samverkan | Varning | .NET 5 | Använd inte OutAttribute på strängparametrar för P/Invokes |
CA1418 | Samverkan | Varning | .NET 6 | Använda giltig plattformssträng |
CA1420 | Samverkan | Varning | .NET 7 | Om du använder funktioner som kräver runtime-marshalling när den är inaktiverad resulterar det i körningsundatag |
CA1422 | Samverkan | Varning | .NET 7 | Verifiera plattformskompatibilitet |
CA1831 | Prestanda | Varning | .NET 5 | Använd AsSpan i stället för intervallbaserade indexerare för sträng när det är lämpligt |
CA1856 | Prestanda | Fel | .NET 8 | Felaktig användning av ConstantExpected attribut |
CA1857 | Prestanda | Varning | .NET 8 | En konstant förväntas för parametern |
CA2013 | Tillförlitlighet | Varning | .NET 5 | Använd inte ReferenceEquals med värdetyper |
CA2014 | Tillförlitlighet | Varning | .NET 5 | Använd inte stackalloc i loopar |
CA2015 | Tillförlitlighet | Varning | .NET 5 | Definiera inte finalizers för typer som härletts från MemoryManager<T> |
CA2017 | Tillförlitlighet | Varning | .NET 6 | Matchningsfel för antal parametrar |
CA2018 | Tillförlitlighet | Varning | .NET 6 | Argumentet count som Buffer.BlockCopy ska anges ska ange hur många byte som ska kopieras |
CA2021 | Tillförlitlighet | Varning | .NET 8 | Anropa inte Enumerable.Cast<T> eller Enumerable.OfType<T> med inkompatibla typer |
CA2022 | Tillförlitlighet | Varning | .NET 9 | Undvik inexakt läsning med Stream.Read |
CA2200 | Förbrukning | Varning | .NET 5 | Återväxt för att bevara stackinformation |
CA2247 | Förbrukning | Varning | .NET 5 | Argumentet som skickas till TaskCompletionSource konstruktorn bör räknas TaskCreationOptions upp i stället för TaskContinuationOptions |
CA2252 | Förbrukning | Fel | .NET 6 | Anmäl dig till förhandsversionsfunktioner |
CA2255 | Förbrukning | Varning | .NET 6 | Attributet ModuleInitializer ska inte användas i bibliotek |
CA2256 | Förbrukning | Varning | .NET 6 | Alla medlemmar som deklareras i överordnade gränssnitt måste ha en implementering i ett DynamicInterfaceCastableImplementation -attributgränssnitt |
CA2257 | Förbrukning | Varning | .NET 6 | Medlemmar som definierats i ett gränssnitt med DynamicInterfaceCastableImplementationAttribute ska vara static |
CA2258 | Förbrukning | Varning | .NET 6 | Det går inte att tillhandahålla ett DynamicInterfaceCastableImplementation gränssnitt i Visual Basic |
CA2259 | Förbrukning | Varning | .NET 7 | ThreadStatic påverkar endast statiska fält |
CA2260 | Förbrukning | Varning | .NET 7 | Använd rätt typparameter |
CA2261 | Förbrukning | Varning | .NET 8 | Använd inte ConfigureAwaitOptions.SuppressThrowing med Task<TResult> |
CA2264 | Förbrukning | Varning | .NET 9 | Skicka inte ett icke-nullbart värde till ArgumentNullException.ThrowIfNull |
CA2265 | Förbrukning | Varning | .NET 9 | Jämför inte med Span<T> null eller default |
Du kan ändra allvarlighetsgraden för dessa regler för att inaktivera dem eller höja dem till fel. Du kan också aktivera fler regler.
- En lista över regler som ingår i varje .NET SDK-version finns i Analyzer-versioner.
- En lista över alla kodkvalitetsregler finns i Kodkvalitetsregler.
Aktivera ytterligare regler
Analysläge refererar till en fördefinierad kodanalyskonfiguration där inga, vissa eller alla regler är aktiverade. I standardanalysläget (Default
) aktiveras endast ett litet antal regler som byggvarningar. Du kan ändra analysläget för projektet genom att ange <AnalysisMode>
egenskapen i projektfilen. De tillåtna värdena är:
Värde | beskrivning |
---|---|
None |
Alla regler är inaktiverade. Du kan selektivt välja enskilda regler för att aktivera dem. |
Default |
Standardläge, där vissa regler är aktiverade som byggvarningar, vissa regler aktiveras som Visual Studio IDE-förslag och resten inaktiveras. |
Minimum |
Mer aggressivt läge än Default läge. Vissa förslag som rekommenderas starkt för byggframtvingande aktiveras som byggvarningar. Om du vill se vilka regler detta omfattar kontrollerar du filen %ProgramFiles%/dotnet/sdk/[version]/Sdks/Microsoft.NET.Sdk/analyzeers/build/config/analysislevel_[level]_minimum.editorconfig . |
Recommended |
Mer aggressivt läge än Minimum läge, där fler regler aktiveras som byggvarningar. Om du vill se vilka regler detta omfattar kontrollerar du filen %ProgramFiles%/dotnet/sdk/[version]/Sdks/Microsoft.NET.Sdk/analyzeers/build/config/analysislevel_[level]_recommended.editorconfig . |
All |
Alla regler är aktiverade som byggvarningar*. Du kan selektivt välja bort enskilda regler för att inaktivera dem. * Följande regler aktiveras inte genom att ange AnalysisMode till All eller genom att ange AnalysisLevel till latest-all : CA1017, CA1045, CA1005, CA1014, CA1060, CA1021 och kodmåttens analysregler (CA1501, CA1502, CA1505, CA1506 och CA1509). Dessa äldre regler kan vara inaktuella i en framtida version. Du kan dock fortfarande aktivera dem individuellt med hjälp av en dotnet_diagnostic.CAxxxx.severity = <severity> post. |
Du kan också utelämna <AnalysisMode>
till förmån för ett sammansatt värde för egenskapen <AnalysisLevel>
. Följande värde aktiverar till exempel den rekommenderade uppsättningen regler för den senaste versionen: <AnalysisLevel>latest-Recommended</AnalysisLevel>
. Mer information finns i AnalysisLevel
.
Information om hur du hittar standard allvarlighetsgraden för varje tillgänglig regel och huruvida regeln är aktiverad i analysläge finns i Default
den fullständiga listan över regler.
Behandla varningar som fel
Om du använder -warnaserror
flaggan när du skapar dina projekt behandlas även alla kodanalysvarningar som fel. Om du inte vill att kodkvalitetsvarningar (CAxxxx) ska behandlas som fel i närvaro av -warnaserror
kan du ange CodeAnalysisTreatWarningsAsErrors
egenskapen MSBuild till false
i projektfilen.
<PropertyGroup>
<CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>
Du ser fortfarande några kodanalysvarningar, men de bryter inte din version.
Senaste uppdateringar
Som standard får du de senaste kodanalysreglerna och standardregelns allvarlighetsgrad när du uppgraderar till nyare versioner av .NET SDK. Om du inte vill ha det här beteendet, till exempel om du vill se till att inga nya regler är aktiverade eller inaktiverade, kan du åsidosätta det på något av följande sätt:
AnalysisLevel
Ange egenskapen MSBuild till ett specifikt värde för att låsa varningarna till den uppsättningen. När du uppgraderar till en nyare SDK får du fortfarande felkorrigeringar för dessa varningar, men inga nya varningar aktiveras och inga befintliga varningar inaktiveras. Om du till exempel vill låsa regeluppsättningen till dem som levereras med version 8.0 av .NET SDK lägger du till följande post i projektfilen.<PropertyGroup> <AnalysisLevel>8.0</AnalysisLevel> </PropertyGroup>
Dricks
Standardvärdet för
AnalysisLevel
egenskapen ärlatest
, vilket innebär att du alltid får de senaste kodanalysreglerna när du flyttar till nyare versioner av .NET SDK.Mer information och en lista över möjliga värden finns i AnalysisLevel.
Installera NuGet-paketet Microsoft.CodeAnalysis.NetAnalyzers för att frikoppla regeluppdateringar från .NET SDK-uppdateringar. För projekt som riktar in sig på .NET 5+ inaktiverar installationen av paketet de inbyggda SDK-analysverktygen. Du får en byggvarning om SDK:n innehåller en nyare analysverktygssammansättningsversion än NuGet-paketet. Om du vill inaktivera varningen anger du egenskapen
_SkipUpgradeNetAnalyzersNuGetWarning
tilltrue
.Kommentar
Om du installerar NuGet-paketet Microsoft.CodeAnalysis.NetAnalyzers bör du inte lägga till egenskapen EnableNETAnalyzers i projektfilen eller i filen Directory.Build.props . När NuGet-paketet har installerats och egenskapen
EnableNETAnalyzers
har angetts tilltrue
genereras en byggvarning.
Analys i kodstil
Med kodformatsanalysregler ("IDExxxx") kan du definiera och underhålla konsekvent kodformat i din kodbas. Standardinställningarna för aktivering är:
Kommandoradsversion: Analys i kodstil är inaktiverad som standard för alla .NET-projekt i kommandoradsversioner.
Du kan aktivera analys i kodstil vid kompilering, både på kommandoraden och i Visual Studio. Överträdelser av kodformat visas som varningar eller fel med prefixet "IDE". På så sätt kan du framtvinga konsekventa kodformat vid byggtiden.
Visual Studio: Kodformatsanalys aktiveras som standard för alla .NET-projekt i Visual Studio som kodrefaktorisering av snabbåtgärder.
En fullständig lista över analysregler i kodformat finns i Regler för kodformat.
Aktivera vid kompilering
Du kan aktivera analys i kodstil när du skapar från kommandoraden och i Visual Studio. (Av prestandaskäl gäller dock en handfull regler i kodformat fortfarande endast i Visual Studio IDE.)
Följ de här stegen för att aktivera analys i kodstil i bygget:
Ange egenskapen MSBuild EnforceCodeStyleInBuild till
true
.I en .editorconfig-fil konfigurerar du varje "IDE"-kodformatregel som du vill köra på build som en varning eller ett fel. Till exempel:
[*.{cs,vb}] # IDE0040: Accessibility modifiers required (escalated to a build warning) dotnet_diagnostic.IDE0040.severity = warning
Dricks
Från och med .NET 9 kan du också använda alternativformatet för att ange en allvarlighetsgrad och få den respekterad vid byggtiden. Till exempel:
[*.{cs,vb}] # IDE0040: Accessibility modifiers required (escalated to a build warning) dotnet_style_require_accessibility_modifiers = always:warning
Du kan också konfigurera en hel kategori som en varning eller ett fel som standard och sedan selektivt inaktivera regler i den kategorin som du inte vill köra i bygget. Till exempel:
[*.{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
Ignorera en varning
Ett sätt att förhindra en regelöverträdelse är att ange allvarlighetsgradsalternativet för regel-ID:t till none
i en EditorConfig-fil. Till exempel:
dotnet_diagnostic.CA1822.severity = none
Mer information och andra sätt att förhindra varningar finns i Så här utelämnar du kodanalysvarningar.
Analysverktyg från tredje part
Förutom de officiella .NET-analysverktygen kan du även installera analysverktyg från tredje part, till exempel StyleCop, Roslynator, XUnit Analyzeers och Sonar Analyzer.