Встроенные анализаторы кода и пакеты NuGet
Только что переключившись на VS2019, я изучаю, использовать ли анализ кода. В свойствах проекта на вкладке "Анализ кода" есть множество встроенных наборов правил Microsoft, и я вижу, как редактор извивается, когда мой код нарушает одно из этих правил. Я могу настроить эти наборы правил и "сохранить как", чтобы создать свои собственные.
Я также видел пакеты NuGet для анализатора кода, такие как Roslynator и StyleCop.Analyzers. В чем разница между этими и встроенными правилами MS? Неужели все сводится к более полному набору правил / большему выбору?
Если бы я хотел придерживаться встроенных правил MS, есть ли какие-то ограничения? Например, будут ли они по-прежнему запускаться и о них будет сообщаться во время сборки TFS/Azure DevOps?
1 ответ
В чем разница между устаревшими анализаторами FxCop и FxCop?
Legacy FxCop выполняет анализ скомпилированной сборки после сборки. Он работает как отдельный исполняемый файл под названием FxCopCmd.exe. FxCopCmd.exe загружает скомпилированную сборку, запускает анализ кода, а затем сообщает результаты (или диагностику).
Анализаторы FxCop основаны на платформе.NET Compiler Platform ("Roslyn"). Вы устанавливаете их как пакет NuGet, на который ссылается проект или решение. Анализаторы FxCop выполняют анализ исходного кода во время выполнения компилятора. Анализаторы FxCop размещаются в процессе компиляции (csc.exe или vbc.exe) и запускают анализ при построении проекта. Результаты анализатора сообщаются вместе с результатами компилятора.
Запись
Вы также можете установить анализаторы FxCop как расширение Visual Studio. В этом случае анализаторы выполняются по мере ввода текста в редакторе кода, но не выполняются во время сборки. Если вы хотите запускать анализаторы FxCop как часть непрерывной интеграции (CI), установите их как пакет NuGet.
https://docs.microsoft.com/en-us/visualstudio/code-quality/fxcop-analyzers-faq?view=vs-2019
Таким образом, встроенные устаревшие анализаторы FxCop и NuGet запускаются только во время сборки, в то время как анализаторы расширений могут запускаться одновременно с JIT-компилятором, выполняемым вами при вводе. Кроме того, вы должны специально указать запускать анализ устаревшего кода при сборке, тогда как анализаторы NuGet будут запускаться при сборке только потому, что они установлены. И анализаторы, установленные как NuGet или расширения, не будут работать, когда вы перейдете в пункт меню "Выполнить анализ кода".
По крайней мере, это то, что я получаю от этой страницы.
Внизу страницы есть ссылка, по которой вы узнаете, какие правила анализа кода были перенесены в новые анализаторы, включая правила, которые теперь не рекомендуются.
https://docs.microsoft.com/en-us/visualstudio/code-quality/fxcop-rule-port-status?view=vs-2019
Различные анализаторы пытаются охватить разные стили кодирования и вещи, которые Microsoft не охватывала при создании FxCop. После того небольшого исследования, которое я только что провел по этому поводу, есть целая кроличья нора, Алиса, на которую у меня уйдет больше времени, чем у меня сейчас. И, кажется, он наполнен множеством загадочных знаний и придирок кода в стиле ОКР, которые заставляют Страну чудес казаться нормальной. Но это только мое мнение.
В этих и основных правилах Microsoft существует множество личных и профессиональных мнений о различных правилах, поэтому есть много места, чтобы использовать то, что вы хотите, и отключать то, что вам не нужно. Новичку я предлагаю включать только несколько правил за раз. Таким образом, вы не будете завалены большим количеством предупреждений и ошибок, чем строк кода, которые у вас могут быть. Хорошо, так что это может быть немного преувеличением, но существует так много правил, которые действительно являются придирками, особенно в отношении устаревшего кода, что на самом деле их не стоит включать, поскольку у вас, вероятно, не будет времени исправить это все. Вы также захотите провести фундаментальное исследование и использовать "здравый смысл", когда решите, что включить. ("Мне действительно нужно беспокоиться о единообразии стиля кодирования с использованием переменных заглавных букв в приложении, которое?"s был перенесен на 4 разных языка за 15+ лет и имеет 10k файлов?") Это личное и профессиональное мнение, так что следите за ним или нет.
И не забывайте правила, которые противоречат друг другу. Это весело, с которыми можно справиться.......