CSF.Analyzers distribui analyzers Roslyn para políticas contextuais de projetos .NET. A v2 separa o produto em três pacotes independentes para que cada solução instale somente as regras que fazem sentido para seu risco operacional, arquitetura e padrão de testes.
Analyzers genéricos do .NET, Roslyn, SonarAnalyzer ou Meziantou.Analyzer verificam práticas amplas de linguagem e plataforma. Estes pacotes cobrem decisões de time que dependem de contexto: endpoints ASP.NET devem declarar autorização explicitamente, camadas core não devem depender de infraestrutura, entidades de domínio podem ter mutabilidade restrita e testes podem rejeitar matchers ou exclusões amplas.
| Pacote | Escopo | Regras |
|---|---|---|
CSF.Analyzers.Reliability |
Confiabilidade e performance operacional em ASP.NET, hosted services e EF Core. | REL001, REL002, REL003, REL004, REL005, REL006 |
CSF.Analyzers.Architecture |
Políticas de autorização, rotas, dependências de camadas, DDD e MSBuild. | ARC001, ARC002, ARC003, ARC004, ARC005, ARC006 |
CSF.Analyzers.Testing |
Qualidade de testes com NSubstitute (Arg.Any/AnyArgs) e FluentAssertions. |
TST001, TST002 |
Os pacotes v2 são gerados pelo workflow de release e anexados à GitHub Release, mas a publicação no NuGet.org ainda está comentada até a configuração explícita de NUGET_API_KEY e de um ambiente protegido. Em 2026-07-23, a API pública do NuGet.org retorna 404 para CSF.Analyzers.Reliability, CSF.Analyzers.Architecture e CSF.Analyzers.Testing.
Os comandos abaixo são o formato esperado para consumo quando os pacotes estiverem publicados no NuGet.org ou disponíveis em um feed privado/local.
Instale cada pacote no projeto que deve receber aquela política. Não há metapacote CSF.Analyzers na v2 inicial.
dotnet add package CSF.Analyzers.Reliability
dotnet add package CSF.Analyzers.Architecture
dotnet add package CSF.Analyzers.TestingEm repositórios com Central Package Management, declare as versões em Directory.Packages.props e use PackageReference sem Version.
- Escolha o pacote que representa a política que você quer validar.
- Instale a partir do NuGet.org quando publicado, ou a partir do feed privado/local usado pelo repositório.
- Compile o projeto e revise os diagnósticos habilitados por padrão.
- Ative regras opt-in apenas quando elas representarem uma política real do time.
Com CSF.Analyzers.Architecture, um endpoint sem decisão explícita de autorização emite ARC001:
app.MapGet("/orders", () => Results.Ok());Código conforme:
app.MapGet("/orders", () => Results.Ok())
.RequireAuthorization();
app.MapGet("/health", () => Results.Ok())
.AllowAnonymous();| ID | Pacote | Categoria | Padrão | Documentação |
|---|---|---|---|---|
REL001 |
Reliability | Performance | warning, habilitada |
REL001 |
REL002 |
Reliability | Reliability | warning, habilitada |
REL002 |
REL003 |
Reliability | Performance | info, opt-in |
REL003 |
REL004 |
Reliability | Performance | warning, habilitada |
REL004 |
REL005 |
Reliability | Reliability | warning, habilitada |
REL005 |
REL006 |
Reliability | Reliability | warning, habilitada |
REL006 |
ARC001 |
Architecture | Security | warning, habilitada |
ARC001 |
ARC002 |
Architecture | Architecture | warning, habilitada |
ARC002 |
ARC003 |
Architecture | Design | info, opt-in |
ARC003 |
ARC004 |
Architecture | Design | info, opt-in |
ARC004 |
ARC005 |
Architecture | Maintainability | info, opt-in |
ARC005 |
ARC006 |
Architecture | Architecture | info, opt-in |
ARC006 |
TST001 |
Testing | TestQuality | info, opt-in |
TST001 |
TST002 |
Testing | TestQuality | info, opt-in |
TST002 |
Regras habilitadas por padrão: REL001, REL002, REL004, REL005, REL006, ARC001, ARC002.
Regras opt-in: REL003, ARC003, ARC004, ARC005, ARC006, TST001, TST002. Elas só emitem diagnóstico quando a severidade é ativada via configuração de analyzer. Para regras de código-fonte, use .editorconfig; para ARC005, prefira .globalconfig, pois o diagnóstico é reportado em arquivos MSBuild passados como AdditionalFiles.
[*.cs]
dotnet_diagnostic.REL003.severity = info
dotnet_diagnostic.ARC003.severity = info
dotnet_diagnostic.TST001.severity = warningExemplo de .globalconfig para ARC005:
is_global = true
dotnet_diagnostic.ARC005.severity = warningOpções específicas ficam documentadas nas páginas das regras e dos pacotes.
- Adoção gradual
- Perfis de
.editorconfig - Migração da v1 para a v2
- Contribuindo com regras
- Validações de release
- Sobreposição com analyzers externos
Use a solução principal:
dotnet restore ./CSF.Analyzers.slnx
dotnet build ./CSF.Analyzers.slnx --configuration Release --no-restore
dotnet test ./CSF.Analyzers.slnx --configuration Release -m:1
powershell -NoProfile -ExecutionPolicy Bypass -File ./scripts/Validate-Release.ps1Os samples ficam em samples/CSF.Analyzers.*.Sample e validam exemplos manuais por pacote.
Os três pacotes usam GitVersion como fonte única de versão. O workflow de release gera CSF.Analyzers.Reliability, CSF.Analyzers.Architecture e CSF.Analyzers.Testing com a mesma versão calculada.
A publicação no NuGet.org permanece comentada no workflow até que NUGET_API_KEY e o ambiente protegido sejam configurados explicitamente. Portanto, este repositório não afirma que os pacotes v2 já estão publicados.