C#/。net / 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 ...无论如何,有什么想法不对吗?

最佳答案

您要隐藏所有类还是仅单个类的消息?如果是前者,则可以禁用该规则。 (执行此操作的确切机制取决于您如何运行FxCop,因此,如果需要帮助,请提供详细信息。)

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

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

10-06 13:29