Gå til indholdet

Statisk kodeanalyse i .NET

Statisk kodeanalyse er en metode til at kontrollere din kode for potentielle fejl, ydelsesproblemer og kodestandarder uden at køre programmet. Det hjælper med at finde og rette fejl tidligt og forbedrer den samlede kodekvalitet. I .NET kan du bruge flere nyttige analyzers, som kan køres uafhængigt af IDE:

Installation af analyzers via NuGet

For at installere en analyzer i et .NET-projekt, skal du bruge NuGet:

dotnet add package IDisposableAnalyzers
dotnet add package Microsoft.CodeAnalysis.NetAnalyzers
dotnet add package Meziantou.Analyzer

Når analyzers er installeret, vil de køre under build og analysere koden, uanset om du bruger VS Code, Rider eller en anden editor. Advarsler og fejl vises i terminalen, Error List (VS) eller via analyzers i din IDE.


Senest anbefalede analyse-niveau

For at få mest muligt ud af analyzers, anbefales det at indstille projektet til det nyeste analyse-niveau. Tilføj dette til dit .csproj:

<PropertyGroup>
  <EnableNETAnalyzers>true</EnableNETAnalyzers>
  <AnalysisLevel>latest-recommended</AnalysisLevel>
</PropertyGroup>

Dette sikrer, at projektet drager fordel af de nyeste regler og forbedringer i analyzers.


Brug af .editorconfig til at styre regler og alvorlighed

En .editorconfig-fil giver dig mulighed for at definere kodestandarder, formattering og analyseringsregler på tværs af hele projektet. Den læses automatisk af .NET SDK under build og kan versionstyres sammen med projektet.

Eksempel på .editorconfig

# Global for hele solutionen
is_global = true

# Generelt niveau for analyzers
dotnet_analyzer_diagnostic.category-Performance.severity = warning
dotnet_analyzer_diagnostic.category-Reliability.severity = warning
dotnet_analyzer_diagnostic.category-Usage.severity = warning
dotnet_analyzer_diagnostic.category-Design.severity = warning

# Gør CA2000 og IDISP001 til fejl (manglende dispose)
dotnet_diagnostic.CA2000.severity = error
dotnet_diagnostic.IDISP001.severity = error

# StyleCop-regler som advarsler
dotnet_analyzer_diagnostic.category-Style.severity = warning

Alvorlighedsniveauer

  • none – slå reglen helt fra
  • silent – registrér, men vis ikke
  • suggestion – vis som grå markering
  • warning – vis som gul advarsel
  • error – vis som rød fejl

Samspil mellem .csproj og .editorconfig

  • .csproj styrer hvilke analyzers der er aktiveret.
  • .editorconfig styrer hvordan reglerne håndteres (advarsel/fejl).

Eksempel:

<PropertyGroup>
  <EnableNETAnalyzers>true</EnableNETAnalyzers>
  <AnalysisLevel>latest</AnalysisLevel>
  <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
</PropertyGroup>

Fordele ved at bruge .editorconfig og analyzers

  • Ensartet kodekvalitet på tværs af hele teamet.
  • Reglerne følger projektet i kildekoden (ingen lokale IDE-indstillinger).
  • Kan versionstyres og håndhæves i CI/CD-pipelines.
  • Med IDisposableAnalyzers fanges utilsigtede memory leaks, når IDisposable-objekter ikke bliver disposed korrekt.
  • Roslynator og Meziantou giver yderligere refactoring og avancerede analysemuligheder.

Dette setup sikrer, at potentielle problemer opdages allerede under udvikling, uanset hvilken IDE eller editor du bruger.