1. ホーム
  2. c#

[解決済み] XmlSerializer のコンストラクタで FileNotFoundException を発生させる

2022-03-14 01:45:15

質問

あるアプリケーションで、型をシリアライズしようとすると失敗します。

のような文があります。

XmlSerializer lizer = new XmlSerializer(typeof(MyType));

を生成します。

System.IO.FileNotFoundException occurred
  Message="Could not load file or assembly '[Containing Assembly of MyType].XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified."
  Source="mscorlib"
  FileName="[Containing Assembly of MyType].XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
  FusionLog=""
  StackTrace:
       at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
       at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)

自分のクラスには特別なシリアライザーを定義していない。

どうすればこの問題を解決できますか?

解決方法は?

信じられないかもしれませんが、これは正常な動作です。例外がスローされますが、XmlSerializerによって処理されるので、それを無視すれば、すべてがうまくいくはずです。

私はこれが非常に腹立たしく、少し検索すればこれに関する苦情がたくさん出てきますが、私が読んだ限りでは、マイクロソフトはこれに関して何もするつもりはないようです。

特定の例外のファーストチャンス例外をオフにすると、デバッグ中に常に例外ポップアップが表示されるのを避けることができます。Visual Studioで、次のページに進みます。 デバッグ -> 例外事項 (または Ctrl + Alt + E ), 共通言語ランタイム例外 -> System.IO -> System.IO.FileNotFoundException .

この問題を回避する別の方法については、ブログの記事で紹介しています。 C# XmlSerializer FileNotFound 例外 (これは、Chris Sells氏のツール XmlSerializerPreCompiler (プリコンパイラ) ).