Ö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 8. 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
CA2200 Användning Varning .NET 5 Återväxt för att bevara stackinformation
CA2247 Användning Varning .NET 5 Argumentet som skickas till TaskCompletionSource konstruktorn bör räknas TaskCreationOptions upp i stället för TaskContinuationOptions
CA2252 Användning Fel .NET 6 Anmäl dig till förhandsversionsfunktioner
CA2255 Användning Varning .NET 6 Attributet ModuleInitializer ska inte användas i bibliotek
CA2256 Användning Varning .NET 6 Alla medlemmar som deklareras i överordnade gränssnitt måste ha en implementering i ett DynamicInterfaceCastableImplementation-attributgränssnitt
CA2257 Användning Varning .NET 6 Medlemmar som definierats i ett gränssnitt med DynamicInterfaceCastableImplementationAttribute ska vara static
CA2258 Användning Varning .NET 6 Det går inte att tillhandahålla ett DynamicInterfaceCastableImplementation gränssnitt i Visual Basic
CA2259 Användning Varning .NET 7 ThreadStatic påverkar endast statiska fält
CA2260 Användning Varning .NET 7 Använd rätt typparameter
CA2261 Användning Varning .NET 8 Använd inte ConfigureAwaitOptions.SuppressThrowing med Task<TResult>

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.

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.

Från och med .NET 6 kan du utelämna <AnalysisMode> till förmån för ett sammansatt värde för <AnalysisLevel> egenskapen. 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 -warnaserrorkan 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 5.0 av .NET SDK lägger du till följande post i projektfilen.

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

    Dricks

    Standardvärdet för AnalysisLevel egenskapen är latest, 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 till true.

    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 till truegenereras 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.

    Från och med .NET 5 kan du aktivera analys i kodstil på bygget, 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

Med .NET 5 SDK och senare versioner kan du 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:

  1. Ange egenskapen MSBuild EnforceCodeStyleInBuild till true.

  2. 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.

Köra kodanalys som en GitHub-åtgärd

Med GitHub-åtgärden för dotnet/kodanalys kan du köra .NET-kodanalyserare som en del av kontinuerlig integrering (CI) i offlineläge. Mer information finns i .NET-kodanalys GitHub Action.

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.

Se även