C# 的 Sonarqube 5.4 自定义规则
Posted
技术标签:
【中文标题】C# 的 Sonarqube 5.4 自定义规则【英文标题】:Sonarqube 5.4 custom rule for C# 【发布时间】:2016-09-03 20:09:49 【问题描述】:我正在使用 SonarQube 5.4 来分析我自己的 C# 代码,分析工作符合我的预期。 现在我已经编写了一些自定义规则,一个使用 StyleCop,另一个使用 FxCop 在我的代码上运行,但我没有找到如何在 SonarQube 中导入这些自定义规则。 我强调我将 SonarQube 5.4 与 C# 插件 5.1 一起使用。在我的安装中,文件夹“规则”不存在。相反,我可以找到:
sonar-fxcop-library-1.3.jar 在 /opt/sonarqube-5.4/data/web/deploy/plugins/csharp/META-INF/lib 和 sonar-stylecop-plugin-1.1 在 /opt/sonarqube-5.4/extensions/plugins.
谁能帮我在 SonarQube 安装中导入我的自定义规则?
【问题讨论】:
您还可以使用与 SonarQube NDepend 规则集成的工具 NDepend 编写自定义规则:ndepend.com/default-rules/webframe.html SQ 集成:ndepend.com/docs/sonarqube-integration-ndepend 【参考方案1】:FxCop 集成:通过指定自定义 FxCop 规则的 CheckId
来扩展 SonarQube (fxcop:CustomRuleTemplate) 中的 Template for custom FxCop rules
。
[编辑] FxCop 规则现在包含在 sonar-fxcop 插件中。
StyleCop 集成:deprecated 因为 StyleCop 不依赖 Roslyn。
【讨论】:
互联网上有一个很好的例子吗?可能我没有正确填写字段。我必须提供一个单独的 xml 文件来在 SonarQube 中包含 FxCop 规则,还是我必须在规则的项目中修改或添加一些东西?【参考方案2】:我正在使用相同的分析工具在 C# 中为 Sonar 编写我自己的自定义规则。从广义上讲,我们必须遵循三个步骤来实现我们的目标:
1.使用 Roslyn 编写实时代码分析器:我使用 Roslyn 分析器工具编写自定义规则以用于分析目的。关于如何开始编写规则确实有一些很好的教程。我曾经开始的一个是 Use Roslyn to Write a Live Code Analyzer for Your API。构建此项目将在项目的 bin 文件夹中生成一个 .nupkg 文件。 假设构建项目生成了一个包 your_project_name.version,例如AnalyzerExample.1.0.6971.18074,类似的东西。
2.使用SonarQube Roslyn SDK 生成一个自定义的SonarQube 插件,该插件封装了Roslyn 分析器。在 SDK 版本和 SonarQube 之间,我们必须遵循一些兼容性矩阵。我们可以克隆存储库,也可以下载分析工具。运行此工具将生成一个 jar 文件。
RoslynSonarQubePluginGenerator.exe /a:analyzerexample
运行该工具将在当前工作目录中生成一些 xml 文件。我们可以在 xml 文件中配置自定义规则属性,然后通过以下命令生成 jar 文件:
RoslynSonarQubePluginGenerator.exe /a:analyzerexample /rules:rules.xml
使用合适的参数运行此生成器后,我们会得到一个 jar 文件,即 analyzerexample-plugin-1.0.6971.18074。这是我们正在寻找的必需插件。它将包含我们在步骤 1 中在项目中编写的所有规则。
3.将生成的jar文件作为插件使用:将第一步生成的插件(jar文件)复制到SonarQube的extensions文件夹中。重新启动声纳服务器。登录到服务器,然后您可以在质量配置文件部分的最近规则列表中看到您添加的规则。单击该规则以激活它,将其添加到某些质量配置文件中。
【讨论】:
【参考方案3】:好的,我在http://sonarqube-archive.15.x6.nabble.com/FxCop-Custom-Rules-option-unavailable-on-sonarqube-5-0-td5032660.html 找到了 一些信息。 总结在规则文件夹中识别规则所需的唯一字段是 CheckId。其他字段只是信息。 我使用 CheckId 添加了规则,但是在我的项目中使用 sonarScanner for MSBuild,我在 SonarQube Web UI 中没有看到有关它的问题。就像我的项目组装没有处理一样。 有人帮忙吗?
【讨论】:
以上是关于C# 的 Sonarqube 5.4 自定义规则的主要内容,如果未能解决你的问题,请参考以下文章