MyAssembly.XmlSerializers.dll ne için oluşturulur?


124

Bir montaj oluşturan bir proje üzerinde çalışıyorum. Ek bir derleme * .XmlSerializers.dll oluşturulmakta olduğunu fark ettim. Bu dosya neden otomatik olarak oluşturulur ve ne için kullanılır?


Sanırım neden üretildiğini zaten biliyorsunuz. değilse, projeniz bir tür web hizmetini açığa çıkardığı için oluşturulur. her zaman ya derleme sırasında ya da çalışma zamanı sırasında oluşturulur. çalışma zamanında rasgele bir adla Temp klasöründe oluşturulur
AaA

Yanıtlar:


101

In .NET uygulama, XmlSerializer (performans nedenlerle) sizin sınıfları deserializing / serializing için geçici derlemesi oluşturur. Ya anında üretilebilir (ancak her çalıştırmada zaman alır) ya da derleme sırasında önceden oluşturulabilir ve sorduğunuz bu derlemede kaydedilebilir.

Sen proje seçeneklerinde bu davranışı değiştirebilirsiniz (sekme Compile -> Gelişmiş Derleme Seçenekleri -> serileştirme derlemelerini üret , Oto veya Açık sırasıyla). Proje dosyasındaki karşılık gelen öğe , örneğin GenerateSerializationAssemblies'dir<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies> .


21
Proje ayarı Otomatik olduğunda üretilirse, bu gerekli olduğu anlamına mı gelir? X.XMLSerializers.dll dosyasını uygulamayla dağıtmazsanız ne olur, bu uygulama anında oluşturulur mu?
Rory

3
Öyleyse bu montajların önceden yüklenmesi nasıl yapılır?
Carlo

1
@Rory, bu sorunun eski olduğunu biliyorum, ama durum böyle görünüyor. Projelerimden üçü olarak ayarlandı Auto, ancak yalnızca biri bir serileştirme DLL'si oluşturdu.
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 manuel değişiklik: proje adına sağ tıklayın -> Özellikler -> Oluştur -> (Aşağı kaydır) Serileştirme montajını oluşturun.
Eido95

54

Bilginize. XmlSerializers.dll dosyasının otomatik olarak oluşturulmasını durdurmak için tam adımlar şunlardır:

  1. VS'de proje dosyanızı sağ tıklayın ve "Özellikler" i seçin
  2. "Oluştur" sekmesini tıklayın
  3. "Serileştirme derlemesi oluştur" açılır menüsünü "Otomatik" ten "Kapalı" ya değiştirin
  4. Yeniden inşa et ve gitmiş olacak

17
Evet ama soru neden oluşturulduğuydu!
Hemant

Bunun eski bir yanıt olduğunu biliyorum, ancak VS2015 Güncelleştirme 3'te .NET 2.0 x86'yı hedefleyen bir Win10 Ent 64bit sisteminde derlendiğinde, "Serileştirme derlemesi oluştur" açılır menüsü "Kapalı" olarak ayarlandığında bile * .XmlSerializers. dll hala oluşturulur. Uygulamam bir ASMX web hizmetine başvuruyor. VS2015 Güncelleme 3'teki bir hata olabilir mi?
Peter

6

Bence bu, performans nedenleriyle XML serileştiricilerin JIT (Tam zamanında) derlemesi.

RegexOptions.Compiled seçeneğini açık kullanarak RegEx örnekleriyle aynı şeyi elde edersiniz.

Ben .NET CLR uzmanı değilim, kesin teknik ayrıntı eksikliği için üzgünüm.


5

*.XmlSerializers.dll Sgen.exe [XML Serializer Generator Tool] kullanılarak oluşturulur

MSDN'de Sgen.exe'ye bakın

Tipik olarak, Sgen.exeProjelerin Oluşturma Sonrası olaylarında kullanılır. Projenizde bir post build olayı olup olmadığına bakın.*.XmlSerializers.dll


4

Proje yalnızca web uygulamaları için project.XMLSerialisers.dll dosyasını oluşturur. Diğer uygulamalar için sgen'i ayrı çalıştırmanız gerekir.


1
WinForms uygulamam, ayarlandığında veya otomatik olarak ayarlandığında MyProject.XMLSerializers.dll oluşturuyor
Kevin Driedger
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.