[英]SonarQube MSBuild runner isn't working with ported FxCop Roslyn rules added to projects
目前,我们在构建过程中正在运行SonarQube分析。 我们希望在Visual Studio 2015中本地运行质量配置文件。为此,我们为Visual Studio创建了一个规则集,并打开了在质量配置文件中启用的规则。 SonarLint对此进行了整合,但是FxCop规则目前尚未同步。 启用FxCop规则后,Visual Studio会冻结。 所以这不是我们的选择。
我们尝试过的另一个选择是代替基于FxCop和Roslyn创建规则集。 正在尝试创建仅Roslyn规则集。 因此,我们已将FxCop端口添加到Roslyn规则 NuGet包中以输出项目。 但是,当我们使用MSBuild Runner 2.1运行SonarQube时,收到以下错误: MSBUILD : error : CA0059 : Invalid settings passed to CodeAnalysis task. See output window for details.
MSBUILD : error : CA0059 : Invalid settings passed to CodeAnalysis task. See output window for details.
即使没有打开这些规则或使用默认的Microsoft Ruleset,也会出现此错误。
当我查看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 repro,可以在其中复制该问题: https : //github.com/mvdiemen/SonarQubeFxCopRoslyn
首先,当前MSBuild扫描程序不支持通过Roslyn运行FxCop。 原因是它公开了打算由FxCop以特定方式使用的规则,这与传递给Roslyn的其他规则不同。
您正在使用的分析器(尤其是System.Runtime.Analyzers-1.2.0-beta2
使用属性CodeAnalysisRuleSetOverrides
覆盖FxCop的规则集。
MSBuild具有目标CodeAnalysis
,该目标调用FxCopCmd.exe
。 定义CodeAnalysisRuleSetOverrides
属性后, FxCopCmd
将接收该属性中定义的所有规则ID作为参数。
您发布的错误来自定义该属性时System.Runtime.Analyzers-1.2.0-beta2
分析器中的错字。 packages\\System.Runtime.Analyzers-1.2.0-beta2\\build\\System.Runtime.Analyzers.props
缺少分号,这会导致FxCopCmd.exe
失败。
请注意, CodeAnalysisRuleSetOverrides
会覆盖由Scanner for MSBuild定义的规则集(通过另一个属性CodeAnalysisRuleSet
)。 这是意料之外的,因为结果是FxCop将使用您在项目中使用的分析器定义的规则,而不是SonarQube服务器中定义的Quality Profile中激活的规则。
我将修复Scanner for MSBuild用来重置属性CodeAnalysisRuleSetOverrides
的target
文件。
要将扫描仪用于MSBuild,应删除那些分析仪。 此处提供更多信息: http : //docs.sonarqube.org/display/SCAN/From+the+Command+Line
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.