web-dev-qa-db-ja.com

MyAssembly.XmlSerializers.dllは何のために生成されますか?

アセンブリを生成するプロジェクトに取り組んでいます。追加のAssembly * .XmlSerializers.dllが生成されていることに気付きました。このファイルが自動生成される理由とその用途は?

122
Hemant

。NET 実装では、XmlSerializerは(パフォーマンス上の理由で)クラスをシリアル化/逆シリアル化するための一時的なアセンブリを生成します。その場で生成できますが(実行ごとに時間がかかります)、コンパイル中に事前生成して、このアセンブリに保存することもできます。

この動作は、プロジェクトオプション(tabCompile->Advanced Compile Options->シリアル化アセンブリの生成AutoまたはOn、それぞれ)。プロジェクトファイル内の対応する要素は、GenerateSerializationAssembliesです。たとえば、<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>

97
Grzenio

参考までに。 XmlSerializers.dllの自動生成を停止する正確な手順は次のとおりです。

  1. VSで、プロジェクトファイルを右クリックし、[プロパティ]を選択します
  2. 「ビルド」タブをクリックします
  3. [シリアル化アセンブリの生成]ドロップダウンを[自動]から[オフ]に変更します
  4. 再構築すると消えます
54
jontsnz

これは、パフォーマンス上の理由からXMLシリアライザーのJIT(ジャストインタイム)コンパイルだと思います。

RegexOptions.Compiledオプションをオンにすると、RegExインスタンスでも同じことが得られます。

私は.NET CLRの専門家ではありません。正確な技術的詳細がないためごめんなさい。

6

*.XmlSerializers.dllは、Sgen.exe [XML Serializer Generator Tool]を使用して生成されます

MSDNのSgen.exe を参照してください

通常、Sgen.exeはプロジェクトのビルド後イベントで使用されます。プロジェクトに*.XmlSerializers.dllを生成するビルド後イベントがあるかどうかを確認します

5
abhilash

プロジェクトは、Webアプリケーション用のproject.XMLSerialisers.dllのみを生成します。他のアプリケーションでは、sgenを個別に実行する必要があります。

4
Malcolm