Pode ser um pouco confuso entender as diferenças entre FxCop herdado (análise binária) e analisadores de .NET (análise de origem). O objetivo deste artigo é abordar algumas perguntas que você possa ter.
Qual é a diferença entre o FxCop herdado e os analisadores .NET?
O FxCop herdado executa análise de pós-build em um assembly compilado. Ele é executado como um executável separado chamado FxCopCmd.exe. O FxCopCmd.exe carrega o assembly compilado, executa a análise de código e, em seguida, relata os resultados (ou diagnóstico).
Os analisadores do .NET baseiam-se no .NET Compiler Platform ("Roslyn"). Habilite-os no SDK do .NET ou instale-os como um pacote NuGet referenciado pelo projeto ou pela solução. Os analisadores executam a análise baseada em código-fonte durante a execução do compilador. Os analisadores são hospedados dentro do processo de compilador, csc.exe ou vbc.exe, e executam a análise quando o projeto é criado. Os resultados do analisador são relatados junto com os resultados do compilador.
Qual é a diferença entre o FxCop e os analisadores de .NET?
Os analisadores FxCop e analisadores de .NET referem-se às implementações do analisador de .NET Compiler Platform ("Roslyn") das regras de AC FxCop. Antes do Visual Studio 2019 16.8 e do .NET 5.0, esses analisadores eram enviados como um Microsoft.CodeAnalysis.FxCopAnalyzers
pacote NuGet. Começando no Visual Studio 2019 16.8 e no .NET 5.0, esses analisadores são incluídos no SDK do .NET. Eles também estão disponíveis como Microsoft.CodeAnalysis.NetAnalyzers
pacote NuGet. Considere migrar de analisadores FxCop para analisadores de .NET.
O comando Executar análise de código executa analisadores do .NET?
Antes da versão 16.5 do Visual Studio 2019, quando você seleciona Analisar>Executar análise de código, ele executa a análise herdada. A partir do Visual Studio 2019 16.5, a opção de menu Executar análise de código executa analisadores baseados em Roslyn para o projeto ou solução selecionado. Se você tiver instalado analisadores do .NET, eles também serão executados. Para obter mais informações, consulte Como executar análise de código manualmente para código gerenciado.
A propriedade do projeto msbuild RunCodeAnalysis executa analisadores?
Não. A propriedade RunCodeAnalysis em um arquivo de projeto (por exemplo, .csproj) só é usada para executar o FxCop herdado. Ele executa uma tarefa msbuild pós-build que invoca FxCopCmd.exe.
Então, como faço para executar analisadores de .NET?
Para executar analisadores do .NET, primeiro habilite-os no SDK do .NET ou instale-os como um pacote NuGet. Em seguida, crie seu projeto ou solução com base no Visual Studio ou usando msbuild. Os avisos e erros gerados pelos analisadores do Roslyn serão exibidos na Lista de Erros ou na janela Comando.
Eu recebo aviso CA0507 mesmo depois de instalar o pacote NuGet dos analisadores de .NET
Se você instalou os analisadores de .NET, mas continua recebendo o aviso CA0507 "Executar Code Analysis" foi preterido a favor dos analisadores FxCop, que são executados durante o build", talvez você precise definir a propriedade do msbuild RunCodeAnalysis no arquivo de projeto como false. Caso contrário, a análise herdada será executada após cada compilação.
<RunCodeAnalysis>false</RunCodeAnalysis>
Quais regras foram portadas para analisadores de .NET?
Para obter informações sobre quais regras de análise herdadas foram portadas para analisadores de .NET, consulte Status da porta da regra FxCop.
Os avisos de análise de código são tratados como erros
Se o projeto usar a opção de build para tratar avisos como erros, os avisos do analisador poderão aparecer como erros. Para evitar que os avisos de análise de código sejam tratados como erros, siga as etapas em Perguntas frequentes sobre análise de código.