6

何年もの間、私はカスタム例外クラスの作成方法について 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]プライベートコンストラクターを削除しました。これにより、カスタム例外クラスがシリアル化できなくなると思います。これはクラス ライブラリによって公開されるクラスであるため、ライブラリを使用するコードにどのような影響がありますか?

4

1 に答える 1

2

System.Runtime.Serialization.SerializationInfo.NET フレームワークの Metro 互換バージョンではまだサポートされていないようです。System.Runtime 名前空間からサポートするために選択しているクラスの詳細については、http: //msdn.microsoft.com/en-us/library/windows/apps/hh454059(v=vs.110).aspxを参照してください。これは変更される可能性があることに注意してください。

はい、シリアライゼーション属性とプライベート コンストラクターを取り出します。

于 2012-04-23T18:08:43.520 に答える