Untuk apa MyAssembly.XmlSerializers.dll dihasilkan?

124

Saya sedang mengerjakan proyek yang menghasilkan perakitan. Saya baru saja melihat bahwa assembly tambahan * .XmlSerializers.dll sedang dibuat. Mengapa file ini dibuat otomatis dan digunakan untuk apa?

Hemant
sumber
Saya pikir Anda sudah tahu mengapa itu dibuat. jika tidak, ini dibuat karena proyek Anda menampilkan jenis layanan web. itu selalu dihasilkan selama waktu kompilasi atau selama runtime. dalam runtime itu dihasilkan dalam folder Temp dengan nama acak
AaA

Jawaban:

101

Dalam implementasi .NET , XmlSerializer menghasilkan rakitan sementara untuk membuat serial / deserialisasi kelas Anda (untuk alasan kinerja). Ini dapat dibuat dengan cepat (tetapi membutuhkan waktu pada setiap eksekusi), atau dapat dibuat sebelumnya selama kompilasi dan disimpan dalam rakitan yang Anda tanyakan ini.

Anda dapat mengubah perilaku ini dalam opsi proyek (tab Compile -> Advanced Compile Options -> Generate serialization assemblies , Auto atau On , masing-masing). Elemen terkait dalam file proyek adalah GenerateSerializationAssemblies , misalnya <GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>,.

Grzenio
sumber
21
Jika dibuat saat pengaturan proyek adalah Otomatis, apakah itu berarti diperlukan? apa yang terjadi jika Anda tidak menyebarkan X.XMLSerializers.dll dengan aplikasi, apakah itu akan dibuat dengan cepat?
Rory
3
Jadi bagaimana cara melakukan pra-pemuatan rakitan ini?
Carlo
1
@Rory, saya tahu pertanyaan ini sudah tua, tapi sepertinya itu masalahnya. Tiga dari proyek saya ditetapkan ke Auto, tetapi hanya satu yang membuat DLL serialisasi.
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
Perubahan manual VS2015: klik kanan pada nama proyek -> Properties -> Build -> (Scroll down) Generate serialization assembly.
Eido95
54

FYI. Langkah-langkah yang tepat untuk menghentikan XmlSerializers.dll agar tidak dibuat secara otomatis adalah:

  1. Di VS, klik kanan file proyek Anda dan pilih "Properties"
  2. Klik tab "Build"
  3. Ubah menu tarik-turun "Hasilkan rakitan serialisasi" dari "Otomatis" ke "Nonaktif"
  4. Bangun kembali dan itu akan hilang
jontsnz.dll
sumber
17
Ya tapi pertanyaannya adalah mengapa itu dibuat!
Hemant
Saya tahu ini adalah respons lama tetapi di VS2015 Update 3 pada aplikasi Winforms yang menargetkan .NET 2.0 x86 ketika dikompilasi pada sistem 64bit Ent Win10 bahkan ketika pengaturan "Hasilkan rakitan serialisasi" dropdown ke "Off" kemudian * .XmlSerializers. dll masih dibuat. Aplikasi saya mereferensikan layanan web ASMX. Mungkin bug di VS2015 Update 3?
Peter
6

Saya pikir ini adalah kompilasi JIT (Just in time) dari serialisers XML untuk alasan kinerja.

Anda mendapatkan hal yang sama dengan instance RegEx menggunakan opsi RegexOptions.Compiled yang diaktifkan.

Saya bukan ahli .NET CLR, maaf karena kurangnya detail teknis yang tepat.

Alan Christensen
sumber
5

*.XmlSerializers.dll dibuat menggunakan Sgen.exe [XML Serializer Generator Tool]

Lihat Sgen.exe di MSDN

Biasanya Sgen.exedigunakan dalam acara Post Build Projects. Lihat apakah proyek Anda memiliki event post build yang menghasilkan*.XmlSerializers.dll

abhilash
sumber
4

Proyek ini hanya menghasilkan project.XMLSerialisers.dll untuk aplikasi web. Untuk aplikasi lain Anda harus menjalankan sgen secara terpisah.

Malcolm
sumber
1
Aplikasi WinForms saya menghasilkan MyProject.XMLSerializers.dll saat mengaturnya aktif atau otomatis
Kevin Driedger