2016-08-12 2 views
0

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

Другой вариант, который мы пробовали, - это не создание набора правил, основанного на FxCop и Roslyn. Старался создать только набор правил roslyn. Таким образом, мы добавили пакет FxCop port to Roslyn rules 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

+0

Можете ли вы поделиться с нами минимальным рабочим (неудачным) воспроизведением? – Tamas

+0

@ Tamas-SonarSourceTeam Я создал ревью на Github, чтобы проблема была воспроизведена. Если у вас возникли проблемы или если вы не можете воспроизвести проблему, свяжитесь со мной. Заранее спасибо за вашу помощь! – mrtentje

+0

@ Tamas-SonarSourceTeam можно воспроизвести проблему? У вас есть (быстрое) решение, как решить эту проблему?Заранее спасибо – mrtentje

ответ

2

Прежде всего, в настоящее время сканера для MSBuild не поддерживает работу FxCop через Рослины. Причина в том, что он раскрывает правила, которые предназначены для использования 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, используемый Сканером для MSBuild для сброса настроек CodeAnalysisRuleSetOverrides.

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