SonarQube MSBuild运行程序无法与已添加到项目中的已移植FxCop Roslyn规则一起使用

马伦捷

目前,我们在构建过程中正在运行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.即使没有打开这些规则或使用默认的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

杜阿尔特·梅内塞斯(Duarte Meneses)

首先,当前MSBuild扫描程序不支持通过Roslyn运行FxCop。原因是它公开了打算由FxCop以特定方式使用的规则,这与传递给Roslyn的其他规则不同。

尤其是System.Runtime.Analyzers-1.2.0-beta2您使用的分析器会使用属性覆盖FxCop的规则集CodeAnalysisRuleSetOverrides

MSBuild具有CodeAnalysis调用的目标FxCopCmd.exeCodeAnalysisRuleSetOverrides定义属性后,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服务器中定义的“质量配置文件”中活动的规则。

我将修复targetScanner for MSBuild用来重置属性的文件CodeAnalysisRuleSetOverrides

要将扫描仪用于MSBuild,应删除那些分析仪。此处的更多信息:http : //docs.sonarqube.org/display/SCAN/From+the+Command+Line

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章