Code analysis 如何抑制宪兵缺陷?

Code analysis 如何抑制宪兵缺陷?,code-analysis,static-analysis,static-code-analysis,gendarme,Code Analysis,Static Analysis,Static Code Analysis,Gendarme,是否可以抑制特定宪兵缺陷信息? 我希望在源代码中使用标志或类似的东西来执行此操作。如果使用console runner,则可以使用缺陷文件(源代码外)来抑制方法、类型或程序集上的任何缺陷 新的宪兵2.8对[SuppressMessage]属性(与fxcop相同)有基本(读取不完整和错误)支持。预计2.10发布后,此功能将正常工作。据我所知,在宪兵(2.8版)中无法启用[SuppressMessage]。我从GitHub上获取了最新的源代码,因为它没有按照描述的那样工作 SupersMessage

是否可以抑制特定宪兵缺陷信息?
我希望在源代码中使用标志或类似的东西来执行此操作。

如果使用console runner,则可以使用缺陷文件(源代码外)来抑制方法、类型或程序集上的任何缺陷


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

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

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

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

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

我能想到的唯一“解决办法”是编写一个自定义规则,在调用时添加订阅SuppressMessageEngine,而不做任何其他事情。Hacky是的,但这应该基于我在他们代码中看到的内容

仅供参考——刚刚实现了这个。您需要创建自己的自定义规则,导入Mono.Cecil和Gendarme.Framework以及target.NETFramework 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规则的SuppressMessage也会抑制宪兵规则),但至少它允许您使用宪兵名称进行抑制。

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

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

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

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

应注意的是,程序集必须使用定义的
code\u ANALYSIS
符号进行编译。此外,最新版本添加了FxCop兼容性,因此如果您已经从FxCop获得SuppressMessage,并且在宪兵中具有等效规则,则消息将被抑制。