【问题标题】:SonarQube MSBuild runner isn't working with ported FxCop Roslyn rules added to projectsSonarQube MSBuild 运行程序无法使用添加到项目中的移植 FxCop Roslyn 规则
【发布时间】:2016-12-19 04:39:46
【问题描述】:

目前,我们正在构建过程中运行 SonarQube 分析。我们希望在 Visual Studio 2015 中本地运行我们的质量配置文件。为此,我们为 Visual Studio 创建了一个规则集,并打开了在我们的质量配置文件中启用的规则。 SonarLint 对此进行了集成,但 FxCop 规则未同步(目前)。启用 FxCop 规则后,Visual Studio 会冻结。所以这不是我们的选择。

我们尝试过的另一个选项是创建基于 FxCop 和 Roslyn 的规则集。试图创建一个仅 roslyn 的规则集。因此,我们将FxCop port to Roslyn rules NuGet 包添加到了项目中。但是当我们使用 MSBuild Runner 2.1 运行 SonarQube 时,我们收到以下错误: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 repro,可以在其中重现此问题:https://github.com/mvdiemen/SonarQubeFxCopRoslyn

【问题讨论】:

  • 你能和我们分享一个最小的工作(失败)复制吗?
  • @Tamas-SonarSourceTeam 我在 Github 上创建了一个 repro,以便可以重现问题。如果您有任何问题或无法重现该问题,请与我联系。提前感谢您的帮助!
  • @Tamas-SonarSourceTeam 是否可以重现该问题?您有(快速)修复如何解决此问题的方法吗?提前致谢
  • 抱歉@mrtentje,我还没有时间,但它在我的短期 TODO 清单上。

标签: c# msbuild sonarqube sonarqube-scan sonarlint


【解决方案1】:

首先,目前 MSBuild 的 Scanner 不支持通过 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 服务器中定义的质量配置文件中活动的规则。

我将修复 Scanner for MSBuild 使用的 target 文件以重置属性 CodeAnalysisRuleSetOverrides

要使用 Scanner for MSBuild,您应该删除这些分析器。更多信息在这里:http://docs.sonarqube.org/display/SCAN/From+the+Command+Line

【讨论】:

    猜你喜欢
    • 2015-11-12
    • 2015-12-27
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 2018-11-03
    • 2015-10-29
    • 1970-01-01
    • 2019-09-24
    相关资源
    最近更新 更多