繁体   English   中英

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\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应用程序不允许我看到位置。 对于所有其他错误,Web应用程序让我通过指向.cs文件的链接查看错误的确切位置。 根据我的规则,不是。
有人可以帮我吗? 进一步的问题是在SonarQube 5.4中,激活了相同的规则,但Web应用程序未显示该错误。

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

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

这是因为较旧版本的SonarQube C#插件完全忽略了FxCop违规,而没有位置信息。 该问题在5.2版的插件中得到了解决,该版本仅在2016年5月上旬才出现(大概是您安装SonarQube 5.5时使用的版本)。 它与SonarQube 5.4版兼容,因此,如果您愿意,您应该可以在较早的安装中使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM