【问题标题】:Export/Import Visual Studio 2015 rule set into SonarQube将 Visual Studio 2015 规则集导出/导入到 SonarQube
【发布时间】:2017-08-25 04:38:14
【问题描述】:

环境:我们正在 Visual Studio 2015 中构建 C# 代码,并使用 Visual Studio 2015 中提供的默认规则集生成 CodeAnalysis 报告。

问题陈述:在与我们的持续集成环境 Jenkins 集成的 SonarQube 中运行相同的代码时,我们会得到不同的代码分析报告,因此我们希望导入 Visual Studio 2015 的 default 规则集以在 SonarQube 5.6 或更高版本中使用( 如果有解决方案,我准备升级声纳)。但问题是 SonarQube 无法识别以 CS 开头的规则集,例如..

<Rules AnalyzerId="Microsoft.CodeAnalysis.CSharp" RuleNamespace="Microsoft.CodeAnalysis.CSharp">
<Rule Id="AD0001" Action="Error" />
<Rule Id="CS0028" Action="Error" />
<Rule Id="CS0078" Action="Error" />
<Rule Id="CS0105" Action="Error" />
<Rule Id="CS0108" Action="Error" />
<Rule Id="CS0109" Action="Error" />

我已经安装了以下插件:

  1. C# 代码分析器
  2. C# 的 CodeCracker

【问题讨论】:

    标签: c# visual-studio visual-studio-2015 continuous-integration sonarqube


    【解决方案1】:

    简答:没有支持的方法。但是你可以尝试破解一下来解决这个问题。

    长答案

    您需要解决多个问题:

    • 您可能用于将分析结果推送到 SonarQube 服务器的 MsBuild 的 SonarQube 扫描器正在从 SQ 服务器拉下活动规则。然后通过ruleset 参数将其传递给msbuild 中的CoreCompile 任务。因此,即使您创建了自己的,也会从参数中删除并更改为声纳。
    • 结束步骤将问题推送到 SQ 服务器,但 SQ 服务器将忽略任何未知的规则 ID。因此,在您的情况下,所有CS* 问题都将被忽略。

    目前,我认为这些问题没有简单的解决方案。一般建议是创建您的 SQ 插件,该插件定义所有 CS* 规则。将这些规则放入规则集文件(可能在开始和构建阶段之间),解析输出 json 文件并将结果发送到服务器。这会起作用,但这是一项相当大的任务,而且有很多地方可能会失控。

    另一种方法是查看SonarQube Roslyn SDK。这个 SDK 让您可以从 Roslyn nuget 分析器创建一个 SonarQube 插件。如果您创建这样的插件,您会看到它嵌入了 2-3 个 XML 文件。这些文件描述了插件的规则。为了支持你的情况,我会:

    • 使用一条规则创建 Roslyn 分析器包。 (没有报告任何问题。)
    • 更改嵌入文件以定义CS* 规则。掌握所有CS* 规则的列表可能并不容易,但this 可能是一个好的开始。
    • 将 SQ 插件部署到 SQ 服务器上,希望它能正常工作。

    【讨论】:

    • 我在这里通知了 SonarSource 这个功能请求:groups.google.com/d/topic/sonarqube/8RY_nR4GgEg/discussion
    • SonarQube Roslyn SDK 不应该能够为 Microsoft.CodeAnalysis.CSharp 生成声纳插件吗?我认为它应该,但我无法让它工作。这是我尝试:( 时的输出
    • 我确信这个场景没有经过测试。顺便说一句,您可以尝试指定早期版本。我很确定 SDK 没有针对为 Roslyn 2.0 构建的软件包进行测试。
    • 抱歉,我认为这行不通。 SonarQube Roslyn SDK 寻找扩展 DiagnosticAnalyzer 的分析器并检查它们声明的 DiagnosticDescriptors。无法保证内部 Roslyn 问题使用相同的架构。事实上我认为很多问题是在Binder 类中产生的,它不是DiagnosticAnalyzer
    • 没问题。他们会,他们总是这样做。
    猜你喜欢
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    相关资源
    最近更新 更多