1

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 ...无论如何,有什么想法是不对的吗?

4

1 回答 1

4

你想禁止所有类的消息还是只显示一个类?如果是前者,您可以禁用该规则。(这样做的确切机制取决于您运行 FxCop 的方式,因此如果您需要帮助,请提供详细信息。)

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

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

于 2011-04-27T15:59:49.797 回答