wshaddix/dotnet-skills/dotnet-add-analyzers
Claude Code and agent skill by wshaddix/dotnet-skills
- community
Checking that the SKILL.md file is still in the repository.
Adding analyzer packages to a project. Nullable, trimming, AOT compat analyzers, severity config.
Install
npx vskill@latest install wshaddix/dotnet-skills/dotnet-add-analyzersSKILL.md
dotnet-add-analyzers
Add and configure .NET code analyzers to an existing project. Covers built-in Roslyn CA rules, nullable reference types enforcement, trimming/AOT compatibility analyzers, and third-party analyzer packages.
Prerequisites: Run [skill:dotnet-version-detection] first — analyzer features vary by SDK version. Run [skill:dotnet-project-analysis] to understand the current project layout.
Cross-references: [skill:dotnet-project-structure] for where build props/targets live, [skill:dotnet-scaffold-project] which includes analyzer setup in new projects, [skill:dotnet-editorconfig] for EditorConfig hierarchy/precedence, IDE* code style preferences, naming rules, and global AnalyzerConfig files.
Built-in Roslyn Analyzers
.NET SDK ships built-in analyzers controlled by AnalysisLevel. Configure in Directory.Build.props:
AnalysisLevel Values
| Value | Behavior | |
|---|---|---|
latest | Default rules only — covers correctness, not style | |
latest-minimum | Fewer rules than default | |
latest-recommended | Default + additional recommended rules | |
latest-all | All rules enabled — most comprehensive | |
9-all, 10-all | Pin to a specific SDK version's full rule set |
latest-all is recommended for new projects. For existing projects with many warnings, start with latest-recommended and tighten over time.
Rule Categories
| Category | Prefix | Examples | |
|---|---|---|---|
| Design | CA1xxx | CA1002 (don't expose generic lists), CA1062 (validate arguments) | |
| Globalization | CA1300–CA1399 | CA1304 (specify CultureInfo) | |
| Performance | CA1800–CA1899 | CA1822 (mark members static), CA1848 (use LoggerMessage) | |
| Reliability | CA2000–CA2099 | CA2000 (dispose objects), CA2007 (ConfigureAwait) | |
| Security | CA2100–CA2199, CA3xxx, CA5xxx | CA2100 (SQL injection), CA3075 (XML processing) | |
| Usage | CA2200–CA2299 | CA2211 (non-constant static fields), CA2245 (don't assign to self) | |
| Naming | CA1700–CA1799 | CA1707 (no underscores in identifiers) | |
| Style | IDE0xxx | IDE0003 (this qualification), IDE0063 (using declaration) |
EditorConfig Severity Overrides
Fine-tune analyzer severity per-rule in .editorconfig:
Common Suppressions by Project Type
ASP.NET Core apps — suppress ConfigureAwait warnings:
Libraries — keep CA2007 as warning (callers may not have a SynchronizationContext):
Test projects — relax certain rules:
Nullable Reference Types
Enable globally in Directory.Build.props:
Nullable analysis produces warnings (CS86xx) not CA rules. Related settings:
For gradual adoption in existing codebases, enable per-file:
See [skill:dotnet-csharp-nullable-reference-types] for annotation strategies and patterns.
Trimming and AOT Compatibility Analyzers
Applications
For apps published with trimming or Native AOT, enable the analyzers alongside the publish properties:
Enable the analyzers early (even before publishing trimmed) to catch issues during development. EnableTrimAnalyzer and EnableAotAnalyzer can be set independently of PublishTrimmed/PublishAot.
Libraries
Libraries use IsTrimmable and IsAotCompatible to declare compatibility to consumers. Enable these even if consumers don't trim yet:
Setting IsTrimmable/IsAotCompatible automatically enables the corresponding analyzers. This ensures the library works correctly when consumers eventually enable trimming/AOT.
What the Analyzers Flag
These analyzers flag:
- Reflection usage that breaks trimming (IL2xxx warnings)
- P/Invoke patterns incompatible with AOT
- Dynamic code generation (
Reflection.Emit,System.Linq.Expressionscompilation) - Types not annotated with
[DynamicallyAccessedMembers]
Third-Party Analyzers
Add via Directory.Build.targets so they apply to all projects:
With CPM, add version entries in Directory.Packages.props:
Recommended Analyzer Packages
| Package | Focus | |
|---|---|---|
Meziantou.Analyzer | Security, performance, best practices (broad coverage) | |
Microsoft.CodeAnalysis.BannedApiAnalyzers | Ban specific APIs via BannedSymbols.txt | |
Microsoft.CodeAnalysis.PublicApiAnalyzers | Track public API surface (library authors) | |
SonarAnalyzer.CSharp | Security, reliability, maintainability |
BannedSymbols.txt
When using BannedApiAnalyzers, create BannedSymbols.txt at the repo root and include it:
Example BannedSymbols.txt:
Adding Analyzers to an Existing Project
- Enable built-in analyzers — set
AnalysisLevelandEnforceCodeStyleInBuildinDirectory.Build.props - Start at recommended level — use
latest-recommendediflatest-allproduces too many warnings - Add EditorConfig overrides — suppress rules that don't apply to your project type
- Add third-party analyzers — via
Directory.Build.targetswith CPM versions - Fix incrementally — enable
TreatWarningsAsErrorsonly after addressing existing warnings, or use<NoWarn>temporarily for categories being addressed
Incremental Adoption Pattern
For large codebases, avoid fixing all warnings at once:
Remove NoWarn entries as each category is addressed. Track progress with:
References
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/dotnet-add-analyzers/SKILL.md
Popularity
- Repository stars
- 1
- 7-day trend score
- 3
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 19 Mar 2026, 7 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/wshaddix/dotnet-skills/dotnet-add-analyzers)