如何为 SonarQube 创建自己的 C# 自定义规则?

Posted

技术标签:

【中文标题】如何为 SonarQube 创建自己的 C# 自定义规则?【英文标题】:How can I create my own C# custom rules for SonarQube? 【发布时间】:2019-05-21 11:48:31 【问题描述】:

我一直在研究它。 我发现了一个很好的示例列表,但对于其他语言here。

我还看了sonar-dotnet。但它看起来与其他实现不相似。

最后,老实说,这可能是我最后一次机会了,我快速浏览了 FxCop 自定义规则,但我不确定哪种方法是正确的。

我正在尝试做的只是一个基本的 c# 规则,可以像 this predefined by sonar 一样查看。

我的意思是,不合规代码合规解决方案

【问题讨论】:

【参考方案1】:

嗯,这取决于。如果您想创建自己的规则,我会说FxCop custom Rules 是正确的方法。虽然,我有点疑惑。你心目中的什么样的规则还不存在。如果您对预定义的不满意,您可以另外使用StyleCop 和/或ReSharper 规则集。这两个插件都是可配置的。但是,当我配置 SQ 时,我通常会禁用现有规则的大部分内容,因为它们会通过各种样式问题污染结果。

【讨论】:

感谢您的回答!我想创建的规则可以是已知样本中的任何内容。我只是将其视为概念证明,因为这是我被要求的。我还在这里检查了不推荐使用的插件:docs.sonarqube.org/display/PLUG/Deprecated+Plugins【参考方案2】:

您指出的 sonar-custom-rules-examples 都是用 Java 编写的,并使用用 Java 编写的各种目标语言的解析器。 用于 C# 和 VB.NET 的 sonar-dotnet 分析器是使用 Microsoft 提供的 Roslyn framework 用 C# 编写的。

如果您想为 C# 编写自己的自定义规则,那么编写 Roslyn 分析器绝对是最简单的方法(Roslyn 替换了现在已过时的 FxCop)。但是,有许多免费的第三方 Roslyn 分析器可用,因此可能有人已经编写了至少一些您想要的规则。看看NuGet 看看有什么可用的。

接下来,您希望 Roslyn 分析器提出的问题出现在 SonarQube 中。如果您使用的是新版本的 SonarQube (v7.4+)、SonarScanner for MSBuild (v4.4+) 和 SonarC# 插件 (v7.6+),那么第三方 Roslyn 分析器引发的问题将自动导入为 generic issues。请参阅docs 了解更多信息。

一般问题有几个重大限制,就像无法选择在 SonarQube UI 中运行的规则一样。如果您想要更全功能的体验(或者如果您使用的是旧版本的 SonarQube),您可以使用 SonarQube Roslyn SDK 生成一个自定义的 SonarQube 插件,该插件包装了 Roslyn 分析器。使用 SDK 很简单:它是一个针对 Roslyn 分析器运行的 exe,它会为您生成一个 SonarQube 插件 jar。

【讨论】:

您能修复 SonarQube 文档链接吗? @JeroenHeier 链接现在还好吗? (上面“docs”链接的页面不是公开的,但现在应该可以访问了——感谢您指出) 感谢您更新您的问题。

以上是关于如何为 SonarQube 创建自己的 C# 自定义规则?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Angular 7 项目设置 sonarqube

如何为基于 Typescript 的 AngularJS 项目配置 SonarQube?

如何为 Xamarin Forms 应用程序创建 Nuget 包

Sonarqube css:如何为前缀为“pr-”的选择器禁用“意外的未知类型”规则

如何为 ExtJS GridPanel 实现自定义行排序

在sonarqube中添加其他语言(如VC ++等)质量配置文件