首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何抑制Gendarme缺陷?

如何抑制Gendarme缺陷?
EN

Stack Overflow用户
提问于 2010-04-14 21:49:51
回答 3查看 1.3K关注 0票数 7

是否可以抑制特定的gendarme缺陷消息?我想在源代码中使用一个标志或类似的东西来做这件事。

EN

回答 3

Stack Overflow用户

发布于 2011-05-11 01:27:58

正如poupou已经提到的,版本2.10支持SuppressMessage属性。

例如,要取消AvoidNonAlphanumericIdentifierRule规则,请执行以下操作:

代码语言:javascript
复制
[SuppressMessage("Gendarme.Rules.Naming", "AvoidNonAlphanumericIdentifierRule")]
protected void Application_Start()
{
     ...
}

请注意,您需要指定规则所在的程序集的名称...在本例中,AvoidNonAlphanumericIdentifierRule住在Gendarme.Rules.Naming.dll。规则及其程序集名称的完整列表为here

票数 5
EN

Stack Overflow用户

发布于 2010-11-11 05:40:33

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

新的Gendarme2.8具有对SuppressMessage属性的基本支持(读取不完整和错误)(与fxcop相同)。希望此功能在2.10版本发布后能够正常工作。

票数 1
EN

Stack Overflow用户

发布于 2010-12-30 00:04:34

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

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

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

我可能错了,但它看起来像是一个疏忽,他们忘记了回去并应用适当的EngineDependency属性。

我能想到的唯一“变通办法”是编写一个自定义规则,当调用该规则时,它会添加一个订阅SuppressMessageEngine,并且不做任何其他事情。是的,但根据我在他们的代码中看到的,这应该是可行的。

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

代码语言:javascript
复制
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名称来抑制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2637876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档