多年来,我一直在遵循关于如何编写自定义异常类的 MS 最佳实践(甚至不记得它是由 FxCop 还是由我阅读的文章首先强制执行的),并以以下方式编写我的类:
using System;
using System.Runtime.Serialization;
[Serializable]
public sealed class MyGreatException : Exception
{
public MyGreatException()
: base() {}
public MyGreatException(string message)
: base(message) {}
public MyGreatException(string message, Exception inner)
: base(message, inner) {}
private MyGreatException(SerializationInfo info, StreamingContext context)
: base(info, context) {}
}
今天,这些类被 Windows 8 App Cert Kit 拒绝:
.API System.Runtime.Serialization.SerializationInfo in MSCORLIB, PUBLICKEYTOKEN=B77A5C561934E089 is not supported for this application type. com.visionobjects.myscript.hwr.dll calls this API.
.API System.SerializableAttribute in MSCORLIB, PUBLICKEYTOKEN=B77A5C561934E089 is not supported for this application type. com.visionobjects.myscript.hwr.dll calls this API.
(在其他拒绝中......)
那么现在是 2012 年,我该如何编写自定义异常类呢?我是否只需要删除[Serializable]
私有构造函数来处理自定义序列化(无论如何我都不需要)?
编辑
我删除[Serializable]
了私有构造函数。我想这使我的自定义异常类不可序列化。由于这是一个由类库公开的类,这对使用该库的代码有何影响?