【问题标题】:How to Suppress Gendarme Defects?如何抑制宪兵缺陷?
【发布时间】:2010-04-14 13:49:50
【问题描述】:

是否可以隐藏特定的宪兵缺陷信息? 我想在源代码中使用标志或类似的东西来做到这一点。

【问题讨论】:

    标签: code-analysis static-analysis static-code-analysis gendarme


    【解决方案1】:

    正如 poupou 已经指出的,2.10 版支持 [SuppressMessage] 属性。

    例如,要禁止使用 AvoidNonAlphanumericIdentifierRule 规则,请执行以下操作:

    [SuppressMessage("Gendarme.Rules.Naming", "AvoidNonAlphanumericIdentifierRule")]
    protected void Application_Start()
    {
         ...
    }
    

    请注意,您需要指定规则所在的程序集的名称...在这种情况下,AvoidNonAlphanumericIdentifierRule 位于 Gendarme.Rules.Naming.dll 中。完整的规则列表及其程序集名称为 here

    【讨论】:

    • 需要注意的是,程序集编译时必须使用CODE_ANALYSIS符号定义for this to work
    • 同样,最新版本添加了 FxCop 兼容性,因此如果您已经拥有来自 FxCop 的 SuppressMessage 并且在 Gendarme 中有等效规则,则该消息将被禁止。
    【解决方案2】:

    如果您使用控制台运行程序,那么您可以使用缺陷文件(源外)来抑制方法、类型或程序集上的任何缺陷。

    新的 Gendarme 2.8 对 [SuppressMessage] 属性(与 fxcop 相同)具有基本(读取不完整和错误)支持。预计 2.10 发布后此功能将正常工作。

    【讨论】:

      【解决方案3】:

      据我所知,没有办法在 Gendarme(2.8 版本)中启用 [SuppressMessage]。我从 GitHub 上获取了最新的源代码,因为它没有像描述的那样工作。

      SupressMessageEngine 在代码中,并且有一些测试通过手动覆盖 Runner.Engines.Subscribe 来执行它。但是 [EngineDependency (typeof(SuppressMessageEngine))] 并未应用于所有已编译的规则,这是宪兵实际运行时订阅的方式。

      我还查看了源代码,以找到一种始终通过配置订阅特定引擎的方法——但没有。

      我可能是错的,但他们忘记返回并应用适当的 EngineDependency 属性似乎是一个疏忽。

      我能想到的唯一“解决方法”是编写一个自定义规则,在调用该规则时,添加订阅 SuppressMessageEngine 并且不执行任何其他操作。哈克是的,但这应该根据我在他们的代码中看到的内容来工作。

      仅供参考——刚刚实现了这个。您需要创建自己的自定义规则,导入 Mono.Cecil 和 Gendarme.Framework 并以 .NET framework 3.5 为目标

      using Gendarme.Framework;
      using Gendarme.Framework.Engines;
      
      namespace MyRules
      {
         [Problem("Gendarme devs forgot to attribute rules with SuppressMessageEngine")]
         [Solution("Include this rule")]
         [EngineDependency(typeof(SuppressMessageEngine))]
         public class AddSuppressMessageSupportRule : Rule {}
      }
      

      遗憾的是,这不会引入 那里的 FxCopCompatibility 属性(即,匹配宪兵规则的 FxCop 规则的 SupressMessage 也会抑制宪兵规则),但至少它允许你用宪兵的名字来压制。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-08
        • 1970-01-01
        • 2012-10-10
        相关资源
        最近更新 更多