Runner SonarQube MSBuild не работает с портированными правилами FxCop Roslyn, добавленными в проекты

В настоящее время мы выполняем анализ SonarQube в процессе сборки. Мы хотели запустить наш профиль качества локально в Visual Studio 2015. Для этого мы создали набор правил для Visual Studio и включили правила, которые были включены в нашем профиле качества. В SonarLint для этого есть интеграция, но правила FxCop не синхронизируются (на данный момент). При включении правил FxCop Visual Studio зависает. Так что это был не вариант для нас.

Другой вариант, который мы попробовали, - это вместо создания набора правил на основе FxCop и Roslyn. Пытался создать набор правил только для roslyn. Итак, мы добавили порт FxCop в правила Roslyn Пакет NuGet для наших проектов. Но когда мы запускали SonarQube с MSBuild Runner 2.1, мы получили следующую ошибку: MSBUILD : error : CA0059 : Invalid settings passed to CodeAnalysis task. See output window for details. Мы получаем эту ошибку, даже если мы не включали эти правила или не использовали набор правил Microsoft по умолчанию.

Когда я смотрю журнал MSBuild, я вижу следующее (удалено множество правил для удобочитаемости):

/rulesetdirectory:"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\\Rule Sets" 
/rule:"-C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\FxCop\\Rules" 
/ruleid:"-Microsoft.Performance#CA1820" 
/ruleid:"-Microsoft.Reliability#CA2002" 
/ruleid:"-Microsoft.Usage#CA1816
      -Microsoft.Usage#CA2208" 
/ruleid:"-Microsoft.Usage#CA2216"  
/searchgac /ignoreinvalidtargets 
/forceoutput /successfile /ignoregeneratedcode /saveMessagesToReport:Active,Excluded 
/timeout:120 
/reportMissingIndirectAssemblies

Switch '/microsoft.usage#ca2208" /ruleid' is an unknown switch.

Type 'FxCopCmd.exe /?' for help on command-line arguments.
MSBUILD : error : CA0059 : Invalid settings passed to CodeAnalysis task. See output window for details. 
Code Analysis Complete -- 1 error(s), 0 warning(s)

Похоже, что SonarQube неправильно генерирует аргумент FxCop в этой ситуации. Кто-нибудь знает, как исправить эту проблему?

Заранее спасибо.

Я создал репро на GitHub, где можно воспроизвести эту проблему: https://github.com/mvdiemen/SonarQubeFxCopRoslyn


person mrtentje    schedule 12.08.2016    source источник
comment
Можете ли вы поделиться с нами минимальной работающей (неудачной) репродукцией?   -  person Tamas    schedule 15.08.2016
comment
@ Tamas-SonarSourceTeam Я создал репро на Github, чтобы можно было воспроизвести проблему. Если у вас возникли проблемы или вы не можете воспроизвести проблему, свяжитесь со мной. Заранее спасибо за помощь!   -  person mrtentje    schedule 18.08.2016
comment
@ Tamas-SonarSourceTeam можно ли воспроизвести проблему? У вас есть (быстрое) решение, как решить эту проблему? заранее спасибо   -  person mrtentje    schedule 12.09.2016
comment
Извините @mrtentje, у меня еще не было времени, но он в моем краткосрочном списке TODO.   -  person Tamas    schedule 12.09.2016


Ответы (1)


Прежде всего, в настоящее время Scanner for MSBuild не поддерживает запуск FxCop через Roslyn. Причина в том, что он предоставляет правила, которые предназначены для использования FxCop особым образом, отличным от других правил, которые передаются в Roslyn.

Используемые вами анализаторы, в частности System.Runtime.Analyzers-1.2.0-beta2, переопределяют набор правил для FxCop, используя свойство CodeAnalysisRuleSetOverrides.

В MSBuild есть цель CodeAnalysis, которая вызывает FxCopCmd.exe. Поскольку свойство CodeAnalysisRuleSetOverrides определено, FxCopCmd получит в качестве параметров все идентификаторы правил, определенные в этом свойстве.

Отправленная вами ошибка возникла из-за опечатки в анализаторе System.Runtime.Analyzers-1.2.0-beta2 при определении этого свойства. В packages\System.Runtime.Analyzers-1.2.0-beta2\build\System.Runtime.Analyzers.props отсутствует точка с запятой, что приводит к ошибке FxCopCmd.exe.

Обратите внимание, что CodeAnalysisRuleSetOverrides переопределяет набор правил, заданный сканером для MSBuild (через другое свойство, CodeAnalysisRuleSet). Это непреднамеренно, потому что в результате FxCop будет использовать правила, определенные анализаторами, которые вы используете в проекте, вместо правил, которые активны в профиле качества, определенном на сервере SonarQube.

Я исправлю файл target, используемый Scanner for MSBuild для сброса свойства CodeAnalysisRuleSetOverrides.

Чтобы использовать Scanner for MSBuild, вы должны удалить эти анализаторы. Дополнительная информация здесь: http://docs.sonarqube.org/display/SCAN/From+the+Command+Line

person Duarte Meneses    schedule 20.09.2016