Генератор плагинов SonarQube для StyleCop не работает с SonarC# v6 и выше
В настоящее время у меня есть проблема с получением StyleCop.Analyzers для работы с SonarQube. Я использую v6.7 SonarQube, и я пробовал это с несколькими версиями плагина SonarC#.
Рекомендуемый способ получения пользовательских правил в SonarQube - использовать инструмент SonarQube Roslyn SDK ( https://github.com/SonarSource/sonarqube-roslyn-sdk) для создания плагина из анализатора Roslyn, в данном случае Пакет StyleCop.Analyers NuGet.
Казалось, что это работает нормально как для v1.0.0, так и для v1.1.0-бета пакета, и правила отображаются в SonarQube для обоих - однако при использовании последней версии SonarC# проект не будет сканироваться должным образом, а число C# строк кода и найденных проблем равно 0. Однако если вы вернетесь к плагину v5.11, проект сканируется должным образом, он находит ~2k строк кода, и все предупреждения StyleCop отображаются должным образом, насколько я могу сказать.
В сборке VSTS выглядит так, как будто плагин работает, потому что предупреждения StyleCop действительно появляются на этапе MSBuild (я понимаю, что правила SonarQube переопределяют любые правила анализа кода в сборке), но они вообще не отображаются в резюме на странице проекта в SonarQube.
Проект SQ Roslyn SDK говорит, что он совместим с v4.5 или выше плагина C#, но не похоже, что он активно поддерживается.
Я не вижу никаких ошибок в журналах SonarQube, но есть несколько предупреждений в задаче "Полный анализ SonarQube" в VSTS:
2018-01-03T15:07:50.0734421Z WARNING: WARN: Protobuf file not found: null\output-cs\encoding.pb
2018-01-03T15:07:50.0734783Z WARNING: WARN: Protobuf file not found: null\output-cs\metrics.pb
2018-01-03T15:07:50.0735152Z WARNING: WARN: Protobuf file not found: null\output-cs\issues.pb
2018-01-03T15:07:50.0735516Z WARNING: WARN: Protobuf file not found: null\output-cs\token-type.pb
2018-01-03T15:07:50.0735888Z WARNING: WARN: Protobuf file not found: null\output-cs\symrefs.pb
2018-01-03T15:07:50.0736289Z WARNING: WARN: Protobuf file not found: null\output-cs\token-cpd.pb
Не совсем уверен, что это проблема с плагином C# или инструментом SDK - у кого-нибудь еще были подобные проблемы? Есть ли какие-либо обходные пути, кроме использования более старой версии плагина C#?
1 ответ
Инструмент SonarQube Roslyn SDK по-прежнему является рекомендуемым способом подключения сторонних анализаторов Roslyn к SonarQube. В последнее время не было необходимости менять SDK, так как способ обработки сгенерированных плагинов с помощью плагина SonarC# не изменился.
Я только что попытался сгенерировать новый плагин для StyleCop, настроил профиль качества, присвоил его проекту и т. Д., И анализ работал, как ожидалось, и загрузил проблемы StyleCop в SonarQube. Я использовал следующие версии (хотя я выполнял анализ локально, а не с помощью VSTS): SonarQube 6.7; Сканер для MSBuild v4.0.0.821; C# плагин v6.7; StyleCop 1.0
Я думаю, что могу объяснить, почему проблемы возникают, когда вы используете v5.11 плагина SonarC#, но не более поздние версии. v5.11 была последней версией, которая могла запускать анализаторы Roslyn сама (плагин SonarC# имел собственный exe-файл, который открывал файлы C#, запускал против них анализаторы Roslyn и загружал проблемы). Эта функция позволила использовать анализаторы Roslyn даже при использовании MSBuild v12, которая не поддерживает запуск анализаторов Roslyn как части сборки. Поддержка этой функции была прекращена в версии 6.0 плагина SonarC# ( https://github.com/SonarSource/sonar-csharp/releases/tag/6.0.0.2033).
Я предполагаю, что проблема не в SDK или плагине StyleCop. Видите ли вы какие-либо проблемы, генерируемые самим анализатором SonarC#, или какие-либо показатели кода? Если нет, то это скорее общая проблема со сборкой, нежели что-то специфическое для SDK/StyleCop.
Некоторые другие предложения: * используете ли вы самую последнюю версию расширения SonarQube для VSTS?
это работает правильно, если вы запускаете анализ с линии, используя Scanner для MSBuild напрямую?
Попробуйте увеличить уровень журнала задач SonarQube, установив /d:sonar.verbose=true в разделе "Дополнительные / Дополнительные параметры" задачи "Начало".
описываемый вами вывод согласуется с тем, что на шаге End не удается найти файлы с проблемами и файлы protobuf, созданные во время сборки. Если вы используете не размещенный агент сборки, вы можете попробовать посмотреть файл sonar-project.properties, созданный задачей End (он будет находиться в папке.sonarqube\out для сборки). Убедитесь, что файл содержит ссылки на файлы *.RoslynCA.json и что эти файлы существуют и содержат ожидаемые проблемы с Roslyn. Файл также должен содержать записи *.sonar.cs.analyzer.projectOutPath, которые указывают на папки на диске. Файлы protobuf должны находиться в подпапке с именем "output-cs".
наконец, вы можете проверить наличие предупреждений в выходных данных MSBuild, как описано в https://groups.google.com/forum/.