SonarQube C# Runner 和 Visual Studio 报告不同的 CA 结果

SonarQube C# Runner and Visual Studio report different CA results

我正在尝试设置 SonarQube 来报告我们的 C# 项目。我在 SQ 中创建了一个新的质量配置文件,其中仅包含代码分析规则(总共 225 个)。我已确保这些规则与 Visual Studio 中源代码中的项目同步。

当SonarQube分析为运行时,会报告不同的结果。 Visual Studio 往往比 SonarQube 运行 拾取更多。

例如,这里有 3 个来自 SonarQube 的关于规则 CA1704 的结果:

而在 VS 中,同样的解决方案还有很多:

我突出显示的 3 个是 SonarQube 正在拾取的 3 个。

许多不同的规则都是一样的。我希望 SQ 和 VS 报告相同的结果。我 运行 对 TFS 构建 (vNext) 的分析,我可以简单地将构建结果传递给 SonarQube 吗?我的意思是,如果我不需要 运行 两次那就太好了。

我需要自己修改SonarQube规则吗?有没有人遇到过这个问题?

更新

我在声纳发布上启用了详细日志记录,我发现它跳过了一些发现的问题:

2016-01-08T14:33:53.5086817Z 14:33:53.430 DEBUG - Skipping the FxCop issue at line 10 which has no associated file.
2016-01-08T14:33:53.5243155Z 14:33:53.430 DEBUG - Skipping the FxCop issue at line 19 which has no associated file.

我的解决方案中的每个项目都有很多这样的内容,并且差距完全匹配,例如在上述情况下,VS 报告了 47 个问题,但 SonarQube 报告了 45 个。我还找不到相关性并且 Google 没有太多关于它的信息。这将是一个大问题,因为我的一个解决方案有 18.5k 个问题,但 SonarQube 只报告 13k 个。

SonarQube 中是否没有针对 类 或声明为字段而非属性的成员显示 CA1704 违规?如果是这样,您已经 运行 进入 SonarQube 的 FxCop plug-in 的更多 "interesting" 行为之一,即它忽略任何不包含文件和行号的违规行为(如果您感兴趣,请参阅 https://github.com/SonarSource/sonar-fxcop-library/blob/master/src/main/java/org/sonar/plugins/fxcop/FxCopSensor.java, of which current version is c518065 中的相关源文件了解详细信息。

FxCop 报告中的行号取自目标程序集的 PDB。但是,PDB 仅包含可执行代码行,因此与可执行代码行无关的违规行为(或至少与 FxCop 可以绑定到其第一行的方法无关)不会在其中包含文件名或行号FxCop 报告。这些最终都会被 SonarQube 忽略。

如果您依赖 SonarQube 报告您的 FxCop 结果,您可能希望考虑提交错误报告。