SonarQube 覆盖规则集和分析器

SonarQube overwrites ruleset and analyzers

我有一个使用 StyleCop.Analyzers(基于 Roslyn)的 C# 项目。当我们使用 msbuild 14 编译此项目时,我们看到 StyleCop.Analyzers 引发的以下警告:

warning SA1005: Single line comment must begin with a space.

到目前为止,还不错。这就是我们所期望的。

然后,我们创建了一个简单的脚本,在 SonarQube msbuild 中执行此编译 start/stop:

cd MyProjectRoot
"D:\MSBuild.SonarQube.Runner-2.0\MSBuild.SonarQube.Runner.exe" begin /k:test /n:test /v:1.0.0 /d:sonar.host.url=https://mysonar.com/ /d:sonar.login=abc
"C:\Program Files (x86)\MSBuild.0\bin\msbuild.exe" /p:Configuration=Debug /t:Rebuild
"D:\MSBuild.SonarQube.Runner-2.0\MSBuild.SonarQube.Runner.exe" end

当我们 运行 这样做时,我们有一些奇怪的事情:我们没有看到以前的警告 SA1005。

通过查看 msbuild 输出,我们看到当 msbuild 不是 在 SonarQube start/stop 中调用时,我们有以下内容:

C:\Program Files (x86)\MSBuild.0\bin\csc.exe ... /analyzer:..\packages\StyleCop.Analyzers.1.0.0\analyzers\dotnet\cs\Newtonsoft.Json.dll /analyzer:..\packages\StyleCop.Analyzers.1.0.0\analyzers\dotnet\cs\StyleCop.Analyzers.CodeFixes.dll /analyzer:..\packages\StyleCop.Analyzers.1.0.0\analyzers\dotnet\cs\StyleCop.Analyzers.dll

但是当 SonarQube start/stop 中使用 StyleCop 时,我们有:

C:\Program Files (x86)\MSBuild.0\bin\csc.exe ... /analyzer:C:\Users\myuser\AppData\Local\Temp\.sonarqube\.static\csharp_1.11.0\SonarAnalyzer.zip\SonarAnalyzer.CSharp.dll /analyzer:C:\Users\myuser\AppData\Local\Temp\.sonarqube\.static\csharp_1.11.0\SonarAnalyzer.zip\SonarAnalyzer.dll

如您所见,我们使用的分析仪不同!事实上,我根本没有使用我配置的分析器。此外,我们没有使用相同的规则集。我没有在 msbuild 输出中显示它,但你可以相信我 ;)

所以两个问题:

注意我用的是:

SonarQube 覆盖了分析期间使用的规则集。如果您希望您的规则集相同,您需要在 SonarQube 中设置质量配置文件以匹配您当前的规则集。如果你想使用它,有一个 VS 插件可以将你的规则集从 SonarQube 服务器同步到你的本地项目。

StyleCop分析器需要使用以下SDK打包分析器:https://github.com/SonarSource-VisualStudio/sonarqube-roslyn-sdk/blob/master/README.md

一旦你这样做了,这些规则应该可以作为质量门规则在声纳中使用,并且会在分析过程中自动运行。