【问题标题】:Can't suppress FxCop Warning CA1062无法抑制 FxCop 警告 CA1062
【发布时间】:2011-04-27 15:13:57
【问题描述】:

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

【问题讨论】:

  • 虽然这不是重复的,但它也可能会解决您的问题:stackoverflow.com/questions/35551/… 在那里查看答案,我敢打赌它会有所帮助
  • 为什么不通过项目属性设置来抑制这些警告。

标签: c# .net fxcop ca1062


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢!嗯.. 这很蹩脚,因为我的类是一个有大约 50 种方法的数据类型。我需要将它们放在每个方法定义的前面。 :T ...这是c#;我使用的所有函数都来自.net,实际上它们自己会抛出适当的异常。所以是的,因为无论如何我都很少考虑这条规则,所以我可能会在整个解决方案范围内禁用该规则。
猜你喜欢
  • 2011-03-16
  • 1970-01-01
  • 2023-02-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
相关资源
最近更新 更多