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

Vip*_*ary 11 c# continuous-integration visual-studio sonarqube visual-studio-2015

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

问题陈述:在与我们的持续集成环境Jenkins集成的SonarQube中运行相同的代码时,我们得到了不同的代码分析报告,所以我们想导入在SonarQube 5.6或更高版本中使用的Visual Studio 2015的默认规则集(如果有解决方案,我准备升级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" />
Run Code Online (Sandbox Code Playgroud)

我已经安装了以下插件:

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

Tam*_*mas 4

简短的回答:没有支持的方法可以做到这一点。但你可以尝试一些破解来解决这个问题。

长答案

您需要解决多个问题:

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

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

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

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