Часто задаваемые вопросы о устаревших анализаторах FxCop и .NET

Это может быть немного запутано, чтобы понять различия между устаревшими FxCop (двоичный анализ) и анализаторами .NET (исходный анализ). В этой статье будут раскрыты некоторые вопросы, которые могут возникать у вас.

Какова разница между устаревшими анализаторами FxCop и .NET?

Устаревшие функции FxCop выполняют анализ после построения скомпилированной сборки. В этом случае запускается отдельный исполняемый файл FxCopCmd.exe. Средство FxCopCmd.exe загружает скомпилированную сборку, выполняет анализ кода и затем подготавливает отчет о результатах (или данные диагностики).

Анализаторы .NET основаны на платформе компилятора .NET (Roslyn). Вы включите их из пакета SDK для .NET или установите их в виде пакета NuGet, на который ссылается проект или решение. Анализаторы выполняют анализ на основе исходного кода во время выполнения компилятора. Анализаторы размещаются в процессе компилятора либо csc.exe, либо vbc.exe, и выполняют анализ при построении проекта. Результаты работы анализатора выводятся вместе с результатами выполнения компилятора.

Какова разница между анализаторами FxCop и анализаторами .NET?

Анализаторы FxCop и анализаторы .NET относятся к реализации правил ЦС FxCop для платформы компилятора .NET (Roslyn). До Visual Studio 2019 16.8 и .NET 5.0 эти анализаторы поставляются как Microsoft.CodeAnalysis.FxCopAnalyzersпакет NuGet. Начиная с Visual Studio 2019 16.8 и .NET 5.0, эти анализаторы включены в пакет SDK для .NET. Они также доступны в виде Microsoft.CodeAnalysis.NetAnalyzersпакета NuGet. Рекомендуется перенести анализаторы FxCop в анализаторы .NET.

Выполняет ли команда "Анализ кода запуска" анализаторы .NET?

До выпуска Visual Studio 2019 16.5 при выборе анализа кода выполняется>устаревший анализ. Начиная с Visual Studio 2019 версии 16.5, параметр меню Запустить анализ кода выполняет анализаторы Roslyn для выбранного проекта или решения. Если вы установили анализаторы .NET, они также будут выполнены. Дополнительные сведения см. в статье "Практическое руководство. Запуск анализа кода вручную для управляемого кода".

Запускаются ли анализаторы с помощью свойства проекта msbuild RunCodeAnalysis?

№ Свойство RunCodeAnalysis в файле проекта (например, .csproj) используется только для выполнения устаревших функций FxCop. В этом случае после построения запускается задача msbuild, которая вызывает файл FxCopCmd.exe.

Так как затем запустить анализаторы .NET?

Чтобы запустить анализаторы .NET, сначала включите их из пакета SDK для .NET или установите их в виде пакета NuGet. После этого следует построить проект или решение из среды Visual Studio или с помощью msbuild. Предупреждения и ошибки, создаваемые анализаторами Roslyn, будут отображаться в списке ошибок или в окне команд.

Я получаю предупреждение CA0507 даже после установки пакета NuGet анализаторов .NET

Если вы установили анализаторы .NET, но продолжите получать предупреждение CA0507 "Анализ кода запуска" не рекомендуется использовать в пользу анализаторов FxCop, которые выполняются во время сборки", возможно, потребуется задать для свойства RunCodeAnalysis msbuild в файлепроекта значение false. В противном случае устаревший анализ будет выполняться после каждой сборки.

<RunCodeAnalysis>false</RunCodeAnalysis>

Какие правила были перенесены в анализаторы .NET?

Сведения о том, какие устаревшие правила анализа были перенесены в анализаторы .NET, см. в статье о состоянии порта правила Fxcop.

Предупреждения анализа кода рассматриваются как ошибки

Если проект использует параметр сборки для обработки предупреждений как ошибок, предупреждения анализатора могут отображаться в виде ошибок. Чтобы предотвратить обработку предупреждений анализа кода как ошибок, выполните действия, описанные в разделе "Часто задаваемые вопросы о анализе кода".

См. также