12

XmlSerializerを使用してmscorelib.dllの特定のタイプを逆シリアル化します

XmlSerializer ser = new XmlSerializer( typeof( [.Net type in System] ) );
return ([.Net type in System]) ser.Deserialize( new StringReader( xmlValue ) );

FileNotFoundExceptionこれにより、アセンブリがロードされたときにキャッチがスローされます。

「ファイルまたはアセンブリ'mscorlib.XmlSerializers、Version = 2.0.0.0、Culture = neutral、PublicKeyToken=b77a5c561934e089'またはその依存関係の1つを読み込めませんでした。システムは指定されたファイルを見つけることができません。」

FusionLog:

=== Pre-bind state information ===
LOG: User = ###
LOG: DisplayName = mscorlib.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
 (Fully-specified)
LOG: Appbase = file:///C:/localdir
LOG: Initial PrivatePath = NULL
Calling assembly : System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\localdir\bin\Debug\appname.vshost.exe.Config
LOG: Using machine configuration file from c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: mscorlib.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
LOG: Attempting download of new URL file:///C:/localdir/bin/Debug/mscorlib.XmlSerializers.DLL.
LOG: Attempting download of new URL file:///C:/localdir/bin/Debug/mscorlib.XmlSerializers/mscorlib.XmlSerializers.DLL.
LOG: Attempting download of new URL file:///C:/localdir/bin/Debug/mscorlib.XmlSerializers.EXE.
LOG: Attempting download of new URL file:///C:/localdir/bin/Debug/mscorlib.XmlSerializers/mscorlib.XmlSerializers.EXE.

mscorlib.XmlSerializers.DLLがないことを知っている限り、DLL名は.Netがシリアライザーを探して自動生成したものだと思います。

シリアル化を最適化するためにコンパイルするときにmyApplication.XmlSerializers.DLLを作成するオプションがあるので、これはフレームワークによるチェックの一部であると思います。

問題は、これがアプリケーションのロードに遅延を引き起こしているように見えることです-この時点で数秒間ハングしているようです。

これを回避またはスピードアップする方法はありますか?

4

3 に答える 3

4

遅延は、カスタムシリアライザーdllが見つからなかったため、システムが同等のコード(非常に時間がかかる)をその場で構築しているためです。

遅延を回避する方法は、システムにDLLをビルドさせ、.EXEで使用できることを確認することです。これを試しましたか?

于 2008-08-15T11:06:41.773 に答える
4

さて、私はこの問題に遭遇し、私の地域に固有の解決策を見つけました.

これは、XML ルート属性なしでリストを XML ドキュメント (ファイル) にシリアライズしようとしたために発生しました。次のファイルを追加すると、エラーはなくなります。

XmlRootAttribute rootAttribute = new XmlRootAttribute();
rootAttribute.ElementName = "SomeRootName";
rootAttribute.IsNullable = true;

それがあなたの問題を解決するかどうかはわかりませんが、私のものは解決しました。

于 2009-06-04T23:10:45.467 に答える
2

私は今推測しています。しかし:

  1. システムが mscorlib 全体のシリアライザーを生成している可能性があり、これは非常に遅くなる可能性があります。
  2. システム型を独自の型でラップし、代わりにシリアル化することで、おそらくこれを回避できます。そうすれば、独自のアセンブリのシリアライザーを取得できます。
  3. sgen.exe を使用して mscorlib のシリアライザーをビルドできる場合があります。これは、VS に統合される前にシリアライザー dll をビルドする古い方法でした。
于 2008-08-15T11:44:33.513 に答える