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

How can I create my own C# custom rules for SonarQube?

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

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

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

我想做的只是一个基本的 c# 规则,可以像 this predefined by sonar 一样进行审查。

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

好吧,这取决于。如果您想创建自己的规则,我会说 FxCop custom Rules is the right way to go. Although, I'm kind of puzzled. What kind of the rule you have in mind that doesn't exist yet. If you're not satisfied with the predefined one, you can use StyleCop and/or ReSharper 规则集。这两个插件都是可配置的。但是,当我配置 SQ 时,我通常会禁用现有规则的很大一部分,因为它们宁愿用各种样式问题污染结果。

您指出的 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. See the docs 以获取更多信息。

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