2011-04-27 70 views
1

c#/ .net/fxcop!无法抑制FxCop警告CA1062

...在一个类中,我想的FxCop闭嘴抱怨

Warning CA1062 : Microsoft.Design : 
In externally visible method 'xyz', validate parameter 'a' before using it. 

基本上,这条规则表明,我把if (a == null) throw new ArgumentNullException("a");在几乎每一个方法在我的代码开始。这会吸引和改变异常处理逻辑。

于是,我把这个地方变成我的类主体:

[SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", 
    Scope = "Type", 
    MessageId = "0", 
    Justification = "We love danger... so far.")] 

无论如何,这甚至不抑制一条消息 - 我仍然得到所有这些警告。如果它恰好位于某个易发生的方法定义之上(即它只能抑制一个单一的警告,而不是全部这种类型),它只会抑制警告。奇怪的是,相同的语法适用于我的课程中多次出现的其他问题。

我不知道我在做什么错了,我坦率地不真正理解如何使用属性参数。http://msdn.microsoft.com/de-de/library/ms244717.aspx并没有太多细节。 :T ...无论如何,任何想法什么是不对的?

+0

虽然这不是重复的,但它也可能解决您的问题: http://stackoverflow.com/questions/35551/excluding-fxcop-rule-in-source查看答案那里,我敢打赌,它可以帮助 – taylonr 2011-04-27 15:23:13

+0

为什么不通过你的项目属性设置禁止这些警告。 – 2013-05-29 10:34:25

回答

4

你想压制所有类或只有一个类的消息吗?如果前者,您可以禁用该规则。 (确切的机制取决于你如何运行FxCop,所以如果你需要帮助,请提供详细信息。)

如果是后者,你至少需要添加一个SuppressMessage属性检测问题的每种方法。这是因为FxCop只会寻求对违规目标的压制。添加到“父”元素(例如:方法所属的类)的抑制在尝试确定违规是否被抑制时从不会被FxCop检查。

如果使用“目标”属性,则对于将抑制放置在代码中的位置具有一定的灵活性,但这不会更改每个违例目标需要一个抑制属性的需求。

+0

谢谢!还有,那很糟糕,因为我的班级是一个包含约50种方法的数据类型。我需要将它们放在每个方法定义的前面。 :T ...这是C#;我使用的所有函数都来自.net,并且实际上会自行抛出适当的异常。所以是的,因为无论如何我都觉得这个规则很少,所以我可能会禁用规则解决方案。 – Efrain 2011-04-28 07:07:10