【问题标题】:SonarQube Architecture Rule Engine for C#C# 的 SonarQube 架构规则引擎
【发布时间】:2014-11-21 19:00:48
【问题描述】:

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

例如:

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

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

【问题讨论】:

    标签: c# .net sonarqube


    【解决方案1】:

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

    但是,与此同时,您确实可以开发自己的自定义 FxCop 规则(现有 C# SonarQube 插件支持),或者按照建议开发新的 SonarQube 插件以从不支持的工具(例如 Nitriq)导入问题.

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

    【讨论】:

      【解决方案2】:

      您可以使用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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-04
        • 1970-01-01
        相关资源
        最近更新 更多