C# 项目上 SonarQube 4.5.7 中的 FxCop 规则

FxCop Rule in SonarQube 4.5.7 on C# project

我正在尝试 运行 使用 FxCop 自定义规则对 SonarQube 进行分析。 在 SonarQube 4.5.7 中,我将规则添加到规则集中,激活它然后 运行 分析。 为了 运行 分析,我使用以下命令序列:

1) MSBuild.SonarQube.Runner.exe begin /k:my.project.C-Sharp-ConsoleApp /n:C-Sharp-ConsoleApp /v:1.1
2) "C:\Program Files (x86)\MSBuild.0\Bin\MSBuild" /T:Rebuild
3) MSBuild.SonarQube.Runner.exe end

我看到规则已执行,因为当我 运行 第二条命令时,我读取了日志的以下部分:

...
(RunCodeAnalysis target) ->
MSBUILD : warning CR1000: MyRules : Field 'CSharpSortNames.m_variabile' is not in Hungarian notation. Field name should be prefixed with 's'. [C:\Users\Alessandro\Documents\Visual Studio 2015\Projects\C-Sharp-ConsoleApp\C-Sharp-ConsoleApp\C-Sharp-ConsoleApp.csproj]

我的自定义规则checkID是CR1000,在第三条命令后,我发现这个规则有错误,但是web应用程序不让我看到哪里。对于所有其他错误,Web 应用程序让我看到 .cs 文件的 link 错误所在的精确行。根据我的规则,它不会。
任何人都可以帮助我吗? 进一步的问题是在 SonarQube 5.4 中激活了相同的规则,但是网络应用程序没有显示错误。

这里的根本原因是 FxCop 使用 PDB 文件中的信息来提供位置信息。但是,PDB 仅包含对调试方案有用的信息,这意味着与不可执行代码(例如:字段声明或接口定义)关联的 FxCop 规则违规将没有可用的位置信息。 (FWIW,有一个开放的 SonarQube issue 来解决这个问题,但除非 SonarQube 直接检查源文件以尝试定位字段声明,否则完成它并不是一件容易的事。我宁愿怀疑他们可能不会打扰因为通过 Roslyn 分析器更容易解决。)

Further problem is in SonarQube 5.4 the same rule is activated but web app does not show the error.

那是因为 C# plugin for SonarQube completely ignored FxCop violations without location information. This was addressed in version 5.2 插件的旧版本,它在 2016 年 5 月上旬才成为(并且可能是您在安装 SonarQube 5.5 时使用的)。它与 SonarQube 的 5.4 版兼容,因此如果您愿意,您应该可以将它与旧版本一起使用。