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

时间:2018-12-20 23:34:10

标签: c# sonarqube sonarqube-scan

我一直在做一些研究。 我发现的是一个很好的示例列表,但使用的是其他语言的here

我也看过sonar-dotnet。但这看起来与其他实现并不相似。

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

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

我的意思是,使用不兼容的代码兼容的解决方案

2 个答案:

答案 0 :(得分:3)

您指向的 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 +),MSBuild的SonarScanner(v4.4 +)和SonarC#插件(v7.6 +)的较新版本,则第三方Roslyn分析仪提出的问题将自动出现导入为 generic issues 。有关更多信息,请参见docs

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

答案 1 :(得分:0)

嗯,这取决于。如果您想创建自己的规则,那么FxCop custom Rules是正确的选择。虽然,我有点困惑。您牢记什么样的规则尚不存在。如果您对预定义的规则不满意,则可以另外使用StyleCop和/或ReSharper规则集。这两个插件都是可配置的。但是,当我配置SQ时,通常会禁用现有规则的很大一部分,因为它们会污染各种样式问题,从而影响结果。