Gre*_*osz 6 c# exception microsoft-metro windows-8
多年来,我一直在关注如何编写自定义异常类的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) {}
}
Run Code Online (Sandbox Code Playgroud)
今天,这些课程被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.
Run Code Online (Sandbox Code Playgroud)
(以及其他拒绝...)
那么现在是2012年,我该如何编写自定义异常类?我只需要删除[Serializable]和私有构造函数应该处理自定义序列化(我不需要)?
编辑
我删除[Serializable]了私有构造函数.我想这会使我的自定义异常类不可序列化.由于这是一个由类库公开的类,这对使用库的代码有何影响?
System.Runtime.Serialization.SerializationInfo.NET 框架的 Metro 兼容版本似乎尚不支持它。有关他们选择从 System.Runtime 命名空间支持哪些类的详细信息,请参阅http://msdn.microsoft.com/en-us/library/windows/apps/hh454059(v=vs.110).aspx 。请记住,这可能会发生变化。
所以是的,取出你的序列化属性和私有构造函数。