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:
- Microsoft.CodeAnalysis.NetAnalyzers
- SonarQube
- StyleCop.Analyzers
- Meziantou.Analyzer
- Microsoft.VisualStudio.Threading.Analyzers
- AsyncFixer
- IDisposableAnalyzers – advarer når
IDisposable-objekter ikke disponeres korrekt - Roslynator – samling af 500+ analyzers og refactorings
- NDepend – avanceret kodeanalyse og afhængighedsdiagrammer
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 frasilent– registrér, men vis ikkesuggestion– vis som grå markeringwarning– vis som gul advarselerror– vis som rød fejl
Samspil mellem .csproj og .editorconfig
.csprojstyrer hvilke analyzers der er aktiveret..editorconfigstyrer 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
IDisposableAnalyzersfanges utilsigtede memory leaks, nårIDisposable-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.