C#、Metro 应用程序、自定义异常类

本文关键字:自定义异常 Metro 应用程序 | 更新日期: 2023-09-27 18:32:04

多年来,我一直在遵循 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]和私有构造函数。我想这使我的自定义异常类不可序列化。由于这是由类库公开的类,这对使用该库的代码有何影响?

C#、Metro 应用程序、自定义异常类

看起来System.Runtime.Serialization.SerializationInfo在 .NET 框架的 Metro 兼容版本中尚不受支持。 请参阅 http://msdn.microsoft.com/en-us/library/windows/apps/hh454059(v=vs.110).aspx了解有关他们选择从 System.Runtime 命名空间支持哪些类的详细信息。 请记住,这可能会发生变化。

所以是的,取出你的序列化属性和私有构造函数。