将 Visual Studio 2015 规则集导出/导入到 SonarQube 中



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

问题陈述:在将相同的代码运行到与我们的持续集成环境 Jenkins 集成的 SonarQube 中时,我们得到了不同的代码分析报告,因此我们希望导入 VisualStudio 2015 的默认规则集以在 SonarQube 5.6 或更高版本中使用(如果有解决方案,我准备升级 Sonar)。但问题是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. CodeCracker for C#

简短回答:没有受支持的方法来执行此操作。但是你可以尝试破解一下来解决这个问题。

长答案

您需要解决多个问题:

  • SonarQube Scanner for 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*规则的列表可能并不容易,但这可能是一个好的开始。
  • 将 SQ 插件部署到 SQ 服务器,并希望它能正常工作。

最新更新