SonarQube 4.5.7中关于C#项目的FxCop规则

时间:2016-05-27 14:48:35

标签: c# msbuild sonarqube fxcop sonarqube-4.5

我想使用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\14.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应用程序让我通过指向.cs文件的链接查看错误的精确行。根据我的规则,它没有 有人可以帮我这个吗? 进一步的问题是在SonarQube 5.4中激活了相同的规则,但是Web应用程序没有显示错误。

1 个答案:

答案 0 :(得分:2)

这里的根本原因是FxCop使用PDB文件中的信息来提供位置信息。但是,PDB仅包含对调试方案有用的信息,这意味着与非可执行代码相关联的FxCop规则违规(例如:字段声明或接口定义)将不具有可用的位置信息。 (FWIW,有一个开放的SonarQube issue用于解决这个问题,但除非SonarQube直接检查源文件以试图找到字段声明,否则完成它将是非常重要的。我宁愿怀疑它们可能不会烦恼鉴于通过Roslyn分析仪解决问题更简单。)

  

进一步的问题是在SonarQube 5.4中,相同的规则被激活但是web   应用程序不显示错误。

这是因为SonarQube的C# plugin旧版本完全忽略了没有位置信息的FxCop违规行为。这个问题在插件的version 5.2中得到了解决,该插件仅在2016年5月初发布(可能是您在安装SonarQube 5.5时使用的插件)。它与SonarQube的5.4版本兼容,因此如果您愿意,您应该可以将它与旧的安装程序一起使用。