用于C#的SonarQube体系结构规则引擎

本文关键字:规则 引擎 体系结构 SonarQube 用于 | 更新日期: 2023-09-27 18:24:44

SonarQube有一个仅限Java的体系结构规则引擎。我正在为C#.net项目寻找一种实现类似参考体系结构规则的方法。

例如:

  • 禁止从*.B.*类访问*.A.*
  • 强制至少从*.C.*类访问一次*.A.*

实现这一点的最佳方式是什么?是否可以在FXCop中创建这些规则?

用于C#的SonarQube体系结构规则引擎

从长远来看,我们肯定希望用C#SonarQube插件提供这样一个开箱即用的规则。

然而,与此同时,您确实可以开发自己的自定义FxCop规则(由现有的C#SonarQube插件支持),或者开发一个新的SonarQobe插件,根据建议从不支持的工具(如Nitriq)导入问题。

如果您需要任何帮助,请随时查看R#插件并向SonarQube开发邮件列表发送请求:https://github.com/SonarCommunity/sonar-resharper

您可以使用Nitriq:创建规则

禁止从.B类访问.A

var results = 
from t in Types
where t.Name.Equals("A") && t.TypesUsing.Any("B")
select new { t.TypeId, t.Name, t.FullName };
Warn(results, 0);

.C类强制至少一次访问.A

var results = 
from t in Types
where t.Name.Equals("A") && !t.TypesUsing.Any("C")
select new { t.TypeId, t.Name, t.FullName };
Warn(results, 0);

另一种方法是使用Roslyn