11

我从各种异常中派生了几个类。现在 VS 在这个问题的标题中给出警告。

  1. 有人能解释一下禁止这条规则的含义吗?

  2. 您能否从此处解释规则说“不要禁止此规则中针对异常类的警告,因为它们必须可序列化才能在应用程序域中正常工作。” ?

PS好吧,我自己有一个答案。您确实必须将异常标记为可序列化。在同一个 AppDomain 中,如果没有此属性,它们可以正常工作。但是,如果您尝试从其他域捕获它,则必须对其进行序列化才能跨越应用程序边界。这就是我发现这个的主要原因。

4

2 回答 2

15

这不完全是 Visual Studio 警告,它是 FxCop 工具产生的警告。您可以从 VS 分析菜单运行它。FxCop 是一种静态分析器,用于查找编译器不会标记的 .NET 程序中的常见问题。它的大多数警告都非常晦涩难懂,很少是真正严重的问题,您需要将其视为“您想过这个吗?” 一种工具。

它试图在这里提醒您的一个小事实是 Exception 类实现了 ISerializable 并具有 [Serializable] 属性。这是一个非常硬的要求,它使基本 Exception 对象可以跨应用程序域序列化。必要的,因为 Exception 不是从 MarshalByRefObject 派生的。并且有必要允许您在另一个应用程序域中运行的代码抛出您可以捕获的异常。

所以 FxCop 指出,您没有对自己的 Exception 派生类做同样的事情。如果您打算让引发异常的代码在另一个应用程序域中运行,这实际上只是一个问题。FxCop 不够聪明,无法知道您是否这样做,它只能提醒您,当您这样做时它会出错。这是非常罕见的,所以当你还不知道你是否会或者这对你来说听起来是否像中文时,请随意忽略警告。

于 2012-07-04T14:35:57.730 回答
1

如果您不打算在应用程序中使用多个 AppDomain,我认为您可以忽略它或抑制它。

于 2012-07-04T10:43:01.143 回答