是否可以抑制特定的gendarme缺陷消息?我想在源代码中使用一个标志或类似的东西来做这件事。
发布于 2011-05-11 01:27:58
正如poupou已经提到的,版本2.10支持SuppressMessage属性。
例如,要取消AvoidNonAlphanumericIdentifierRule规则,请执行以下操作:
[SuppressMessage("Gendarme.Rules.Naming", "AvoidNonAlphanumericIdentifierRule")]
protected void Application_Start()
{
...
}请注意,您需要指定规则所在的程序集的名称...在本例中,AvoidNonAlphanumericIdentifierRule住在Gendarme.Rules.Naming.dll。规则及其程序集名称的完整列表为here。
发布于 2010-11-11 05:40:33
如果您使用控制台运行器,那么您可以使用缺陷文件(开源)来抑制方法、类型或程序集上的任何缺陷。
新的Gendarme2.8具有对SuppressMessage属性的基本支持(读取不完整和错误)(与fxcop相同)。希望此功能在2.10版本发布后能够正常工作。
发布于 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为目标
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名称来抑制。
https://stackoverflow.com/questions/2637876
复制相似问题