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 ...无论如何,任何想法什么都不对?
答案 0 :(得分:4)
您要为所有类或仅限一个类抑制消息吗?如果是前者,则可以禁用该规则。 (这样做的确切机制取决于你如何运行FxCop,所以如果你需要帮助,请提供详细信息。)
如果是后者,则至少需要为检测到问题的每种方法添加一个SuppressMessage属性。原因是FxCop只查找违规目标的抑制。在尝试确定违规是否被抑制时,FxCop永远不会检查添加到“父”元素的抑制(例如:方法所属的类)。
如果使用Target属性,您在代码中放置抑制的位置确实有一定的灵活性,但这不会改变每个违规目标需要一个抑制属性。