7

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

4

3 回答 3

5

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

例如,要抑制 AvoidNonAlphanumericIdentifierRule 规则,请执行以下操作:

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

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

于 2011-05-10T17:27:58.260 回答
1

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

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

于 2010-11-10T21:40:32.843 回答
0

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

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

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

我可能是错的,但他们忘记返回并应用适当的 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 属性即,与 Gendarme 规则匹配的 FxCop 规则的 SupressMessage 也会抑制 Gendarme 规则),但至少它允许您使用 Gendarme 名称来抑制。

于 2010-12-29T16:04:33.670 回答