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


124

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


なぜそれが生成されるのかすでにご存じだと思います。そうでない場合は、プロジェクトが一種のWebサービスを公開しているために生成されます。常にコンパイル時または実行時に生成されます。ランタイムでは、ランダムな名前でTempフォルダに生成されます
AaA

回答:


101

.NET実装で、XmlSerializerをは(パフォーマンス上の理由から)あなたのクラスをデシリアライズ/シリアライズするための一時アセンブリを生成します。オンザフライで生成できます(ただし、実行するたびに時間がかかります)、またはコンパイル中に事前生成して、要求しているこのアセンブリに保存できます。

(タブあなたは、プロジェクトオプションでこの動作を変更することができますコンパイル - > 高度なコンパイルオプション > - シリアル化アセンブリを生成し自動またはオンそれぞれ)。プロジェクトファイル内の対応する要素はGenerateSerializationAssemblies<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>です。たとえば、です。


21
プロジェクト設定がAutoのときに生成された場合、それはそれが必要であることを意味しますか?X.XMLSerializers.dllをアプリケーションと一緒にデプロイしない場合はどうなりますか?それはその場で生成されますか?
Rory

3
では、これらのアセンブリをプリロードするにはどうすればよいでしょうか。
カルロ

1
@ロリー、私はこの質問が古いことを知っていますが、それは事実のようです。3つのプロジェクトがに設定されAutoましたが、1つだけがシリアル化DLLを作成しました。
ps2goat

4
**Generate Serialization Assemblies** Specifies whether the compiler will use the XML Serializer Generator Tool (Sgen.exe) to create XML serialization assemblies. Serialization assemblies can improve the startup performance of XmlSerializer if you have used that class to serialize types in your code. By default, this option is set to Auto, which specifies that serialization assemblies be generated only if you have used XmlSerializer to encode types in your code to XML. msdn.microsoft.com/en-us/library/kb4wyys2.aspx
ps2goat

2
VS2015手動変更:プロジェクト名を右クリック-> プロパティ -> ビルド ->(下にスクロール)シリアル化アセンブリを生成します。
Eido95

54

ご参考までに。XmlSerializers.dllが自動生成されないようにする正確な手順は次のとおりです。

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

17
ええ、でも問題はなぜそれが生成されるのです!
Hemant

私はこれが古い応答であることを知っていますが、Win10 Ent 64ビットシステムでコンパイルすると、.NET 2.0 x86をターゲットとするWinformsアプリのVS2015 Update 3で、[Generate serialization assembly]ドロップダウンを[Off]に設定してから、*。XmlSerializersを実行しても同様です。 dllは引き続き生成されます。私のアプリはASMX Webサービスを参照しています。VS2015 Update 3のバグでしょうか?
Peter

6

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

RegExOptions.Compiledオプションをオンにして、RegExインスタンスで同じことを行います。

私は.NET CLRのエキスパートではありません。正確な技術的な詳細が不足しているため、申し訳ありません。


5

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

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

通常、これSgen.exeはプロジェクトのビルド後イベントで使用されます。あなたのプロジェクトにポストビルドイベントがあり、*.XmlSerializers.dll


4

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


1
WinFormsアプリは、設定がオンまたは自動の場合、MyProject.XMLSerializers.dllを生成します
Kevin Driedger
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.