2009-06-01 16 views
109

私はアセンブリを生成するプロジェクトに取り組んでいます。私は、追加のアセンブリ* .XmlSerializers.dllが生成されていることに気付きました。なぜこのファイルが自動生成され、それが使われているのですか?MyAssembly.XmlSerializers.dllは何のために生成されますか?

+0

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

答えて

84

.NET実装を生成するポストビルドイベントがある場合、XmlSerializerはパフォーマンス上の理由からクラスのシリアル化/逆シリアル化のための一時アセンブリを生成します。これはオンザフライで生成することもできます(ただし、実行するたびに時間がかかります)。また、コンパイル時に事前に生成しておき、このアセンブリで保存することもできます。

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

+17

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

+1

これらのアセンブリをどのようにプリロードするのですか? – Carlo

+0

@Rory、私はこの質問が古いことを知っていますが、そうであるようです。私のプロジェクトのうち3つは 'Auto'に設定されていましたが、1つだけが直列化DLLを作成しました。 – ps2goat

6

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

RegExインスタンスでRegexOptions.Compiledオプションをオンにして同じことができます。

私は.NET CLRの専門家ではありません。正確な技術的な詳細が不明です。

5

*.XmlSerializers.dllはSgen.exe [XMLシリアライザジェネレータツール]

を使用して生成されている一般的Sgen.exeは、プロジェクトのイベントを構築後に使用されているSgen.exe on MSDN

を参照してください。プロジェクトに*.XmlSerializers.dll

45

FYI。正確な手順は、自動生成されてからXmlSerializers.dllを停止することがある:

VSで
  1. 、「構築」タブに
  2. の変更をクリックし、プロジェクトファイルを右クリックし、「プロパティ」
  3. リビルドを「オフ」に「自動」から
  4. をドロップダウンを「シリアル化アセンブリを生成し」、それはプロジェクトが唯一のWebアプリケーションのためのproject.XMLSerialisers.dllを生成
+14

ええ、しかし、質問は**それが生成された理由です**! – Hemant

+0

これは古いレスポンスですが、Win10 Ent 64bitシステムでコンパイルしたときにWinFormsアプリをVS2015 Update 3でコンパイルすると.NET 2.0 x86をターゲットにしているため、「シリアル化アセンブリを生成する」ドロップダウンを「オフ」にしても* .XmlSerializers .dllは引き続き生成されます。私のアプリはASMX Webサービスを参照しています。おそらくVS2015 Update 3のバグ? – Peter

4

消えてしまいます。他のアプリケーションでは、sgenを個別に実行する必要があります。

+1

My WinForms Appは、MyProject.XMLSerializers.dllを生成するか、またはauto –