Comprender las diferencias entre los analizadores heredados FxCop (análisis binario) y los analizadores de .NET (análisis de código fuente) puede ser un poco confuso. Este artículo pretende abordar algunas de las preguntas que pudiera tener.
¿Cuál es la diferencia entre los analizadores heredados de FxCop y los analizadores .NET?
El FxCop heredado ejecuta un análisis posterior a la compilación en un ensamblado compilado. Se ejecuta como un archivo ejecutable independiente denominado FxCopCmd.exe. FxCopCmd.exe carga el ensamblado compilado, ejecuta el análisis de código y después informa de los resultados (o diagnósticos).
Los analizadores de .NET se basan en .NET Compiler Platform (“Roslyn”). Puede habilitarlos desde el SDK de .NET o instalarlos como un paquete NuGet al que hace referencia el proyecto o la solución. Los analizadores ejecutan análisis basados en código fuente durante la ejecución del compilador. Los analizadores se hospedan dentro del proceso del compilador, ya sea csc.exe o vbc.exe, y ejecutan el análisis cuando se compila el proyecto. Se notifican los resultados del analizador junto con los del compilador.
¿Cuál es la diferencia entre los analizadores de FxCop y los de .NET?
Tanto los analizadores de FxCop como los de .NET hacen referencia a las implementaciones de las reglas de CA de FxCop del analizador de .NET Compiler Platform ("Roslyn"). Antes de Visual Studio 2019 16.8 y .NET 5.0, estos analizadores se incluyen como un paquete NuGet Microsoft.CodeAnalysis.FxCopAnalyzers
. A partir de Visual Studio 2019 16.8 y .NET 5.0, estos analizadores se incluyen con el SDK de .NET. También están disponibles como un paquete NuGet Microsoft.CodeAnalysis.NetAnalyzers
. Considere la posibilidad de migrar de los analizadores de FxCop a los de .NET.
¿El comando Ejecutar análisis de código ejecuta los analizadores de .NET?
En las versiones anteriores a Visual Studio 2019 16.5, al seleccionar Analizar>Ejecutar análisis de código, se ejecuta el análisis heredado. A partir de Visual Studio 2019 16.5, la opción de menú Ejecutar análisis de código ejecuta analizadores basados en Roslyn para el proyecto o la solución seleccionados. Si ha instalado analizadores de .NET, también se ejecutarán. Para obtener más información, consulte Ejecución manual del análisis de código para .NET.
¿La propiedad de proyecto de msbuild RunCodeAnalysis ejecuta los analizadores?
No. La propiedad RunCodeAnalysis en un archivo de proyecto (por ejemplo, .csproj) solo se usa para ejecutar FxCop heredado. Ejecuta una tarea de msbuild posterior a la compilación que invoca FxCopCmd.exe.
Entonces, ¿cómo puedo ejecutar analizadores de .NET?
Para ejecutar los analizadores de .NET, habilítelos primero desde el SDK de .NET o instálelos como un paquete NuGet. Después, compile el proyecto o solución en Visual Studio o con msbuild. Las advertencias y errores que generan los analizadores de Roslyn aparecerán en la Lista de errores o la ventana de comandos.
Aparición de una advertencia CA0507 incluso después de instalar el paquete NuGet de los analizadores de .NET
Si ha instalado los analizadores de .NET, pero sigue apareciendo la advertencia CA0507 "'Ejecutar análisis de código' se ha dejado de usar en favor de los analizadores de FxCop, que se ejecutan durante la compilación", podría ser necesario establecer la propiedad RunCodeAnalysis de msbuild del archivo del proyecto en false. De lo contrario, el análisis heredado se ejecutará después de cada compilación.
<RunCodeAnalysis>false</RunCodeAnalysis>
¿Qué reglas se han migrado a los analizadores de .NET?
Para obtener información sobre qué reglas de análisis heredadas se han migrado a los analizadores de .NET, consulte Estado de la migración de reglas de FxCop.
Las advertencias de análisis de código se tratan como errores
Si el proyecto utiliza la opción de compilación para tratar las advertencias como errores, las advertencias del analizador pueden aparecer como errores. Para evitar que las advertencias del análisis de código se traten como errores, siga los pasos en Preguntas más frecuentes sobre el análisis de código en Visual Studio.