私はアセンブリを生成するプロジェクトに取り組んでいます。私は、追加のアセンブリ* .XmlSerializers.dllが生成されていることに気付きました。なぜこのファイルが自動生成され、それが使われているのですか?MyAssembly.XmlSerializers.dllは何のために生成されますか?
答えて
.NET実装を生成するポストビルドイベントがある場合、XmlSerializerはパフォーマンス上の理由からクラスのシリアル化/逆シリアル化のための一時アセンブリを生成します。これはオンザフライで生成することもできます(ただし、実行するたびに時間がかかります)。また、コンパイル時に事前に生成しておき、このアセンブリで保存することもできます。
あなたは、プロジェクトオプションでこの動作を変更することができます(タブコンパイル - >詳細コンパイルオプション - >はそれぞれ、にシリアル化アセンブリ、オートかを生成します)。プロジェクトファイル内の対応する要素はGenerateSerializationAssembliesです。たとえば、<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
です。
これはパフォーマンス上の理由から、これがJIT(Just in time)コンパイルのXMLシリアライザだと思います。
RegExインスタンスでRegexOptions.Compiledオプションをオンにして同じことができます。
私は.NET CLRの専門家ではありません。正確な技術的な詳細が不明です。
*.XmlSerializers.dll
はSgen.exe [XMLシリアライザジェネレータツール]
を使用して生成されている一般的Sgen.exe
は、プロジェクトのイベントを構築後に使用されているSgen.exe on MSDN
を参照してください。プロジェクトに*.XmlSerializers.dll
FYI。正確な手順は、自動生成されてからXmlSerializers.dllを停止することがある:
VSで- 、「構築」タブに
- の変更をクリックし、プロジェクトファイルを右クリックし、「プロパティ」
- リビルドを「オフ」に「自動」から
- をドロップダウンを「シリアル化アセンブリを生成し」、それはプロジェクトが唯一のWebアプリケーションのためのproject.XMLSerialisers.dllを生成
消えてしまいます。他のアプリケーションでは、sgenを個別に実行する必要があります。
My WinForms Appは、MyProject.XMLSerializers.dllを生成するか、またはauto –
私はあなたがすでにそれがなぜ生成されているのか知っていると思います。そうでなければ、あなたのプロジェクトが一種のWebサービスを公開しているために生成されます。コンパイル時または実行時に常に生成されます。実行時にランダムな名前のTempフォルダに生成されます – AaA