无法抑制FxCop警告CA1062

时间:2011-04-27 15:13:58

标签: c# .net fxcop ca1062

C#/。净/的FxCop!

...在课堂上,我希望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 ...无论如何,任何想法什么都不对?

1 个答案:

答案 0 :(得分:4)

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

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

如果使用Target属性,您在代码中放置抑制的位置确实有一定的灵活性,但这不会改变每个违规目标需要一个抑制属性。