Экспорт/импорт правил Visual Studio 2015, установленных в SonarQube

Среда. Мы создаем код С# в Visual Studio 2015 и генерируем отчет CodeAnalysis, используя набор правил по умолчанию, доступный в Visual Studio 2015.

Заявление о проблемах. При запуске такого же кода в SonarQube, интегрированном с нашей непрерывной интеграционной средой Jenkins, мы получаем другой отчет анализа кода, поэтому мы хотим импортировать набор правил по умолчанию для Visual Studio 2015, который будет использоваться в SonarQube 5.6 или позже (я готов обновить Sonar, если есть решение). Но проблема заключается в том, что SonarQube не может распознать набор правил, начиная с CS, например..

<Rules AnalyzerId="Microsoft.CodeAnalysis.CSharp" RuleNamespace="Microsoft.CodeAnalysis.CSharp">
<Rule Id="AD0001" Action="Error" />
<Rule Id="CS0028" Action="Error" />
<Rule Id="CS0078" Action="Error" />
<Rule Id="CS0105" Action="Error" />
<Rule Id="CS0108" Action="Error" />
<Rule Id="CS0109" Action="Error" />

У меня уже установлены следующие плагины:

  • Анализатор кода для С#
  • CodeCracker для С#

Ответ 1

Короткий ответ: нет поддерживаемого способа сделать это. Но вы можете попытаться немного взломать, чтобы решить эту проблему.

Длинный ответ

Существует несколько проблем, которые вам необходимо решить:

  • Сканер SonarQube для MsBuild, который вы, вероятно, используете для вывода результатов анализа на сервер SonarQube, сбрасывает активные правила с сервера SQ. Затем он передается в задачу CoreCompile в msbuild с помощью параметра ruleset. Таким образом, даже если вы создали свой собственный, который будет удален из параметров и изменен на Sonar один.
  • Конечный шаг вызывает проблемы на сервере SQ, но SQ-сервер игнорирует любой идентификатор правила, который неизвестен. Поэтому в вашем случае все проблемы CS* будут проигнорированы.

В настоящий момент я не думаю, что это простое решение этих проблем. Общее предложение было бы создать ваш плагин SQ, который определяет все правила CS*. Получите эти правила в файле набора правил (возможно, между фазой begin и build), проанализируйте выходной файл json и отправьте результаты на сервер. Это сработает, но это довольно большая задача, и есть много мест, где это может пойти на уступки.

Другой подход - взглянуть на SonarQube Roslyn SDK. Этот SDK позволяет создавать плагин SonarQube от анализаторов Roslyn nuget. Если вы создадите такой плагин, вы увидите, что он содержит 2-3 XML файла. Эти файлы описывают правила плагина. Чтобы поддержать ваше дело, я бы:

  • Создайте пакет анализатора Roslyn с одним правилом. (Который не сообщает о каких-либо проблемах.)
  • Измените встроенные файлы, чтобы определить правила CS*. Вероятно, не так легко получить список всех правил CS*, но this может стать хорошим началом.
  • Разверните плагин SQ на сервере SQ и надейтесь, что он будет работать.