目前,我们在构建过程中正在运行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
首先,当前MSBuild扫描程序不支持通过Roslyn运行FxCop。原因是它公开了打算由FxCop以特定方式使用的规则,这与传递给Roslyn的其他规则不同。
尤其是System.Runtime.Analyzers-1.2.0-beta2
,您使用的分析器会使用属性覆盖FxCop的规则集CodeAnalysisRuleSetOverrides
。
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服务器中定义的“质量配置文件”中活动的规则。
我将修复target
Scanner for MSBuild用来重置属性的文件CodeAnalysisRuleSetOverrides
。
要将扫描仪用于MSBuild,应删除那些分析仪。此处的更多信息:http : //docs.sonarqube.org/display/SCAN/From+the+Command+Line
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句