Per cosa viene generato MyAssembly.XmlSerializers.dll?


124

Sto lavorando a un progetto che genera un assembly. Ho appena notato che viene generato un assembly aggiuntivo * .XmlSerializers.dll. Perché questo file viene generato automaticamente e per cosa viene utilizzato?


Penso che tu sappia già perché è stato generato. in caso contrario, viene generato perché il tuo progetto sta esponendo una specie di servizio web. viene sempre generato durante il tempo di compilazione o durante il runtime. in fase di esecuzione viene generato nella cartella Temp con un nome casuale
AaA

Risposte:


101

Nell'implementazione di .NET , XmlSerializer genera un assembly temporaneo per serializzare / deserializzare le classi (per motivi di prestazioni). Può essere generato al volo (ma richiede tempo per ogni esecuzione) oppure può essere rigenerato durante la compilazione e salvato in questo assembly di cui si sta chiedendo.

È possibile modificare questo comportamento nelle opzioni del progetto (scheda Compila -> Opzioni di compilazione avanzate -> Genera assiemi di serializzazione , Auto o Attivo , rispettivamente). L'elemento corrispondente nel file di progetto è GenerateSerializationAssemblies , ad esempio <GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>.


21
Se viene generato quando l'impostazione del progetto è Auto, significa che è necessario? cosa succede se non si distribuisce X.XMLSerializers.dll con l'applicazione, verrà generato al volo?
Rory,

3
Quindi, come si fa a precaricare questi assiemi?
Carlo,

1
@Rory, so che questa domanda è vecchia, ma sembra essere il caso. Tre dei miei progetti erano impostati su Auto, ma solo uno ha creato una DLL di serializzazione.
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 modifica manuale: fare clic con il tasto destro sul nome del progetto -> Proprietà -> Costruisci -> (Scorri verso il basso) Genera assembly di serializzazione.
Eido95,

54

FYI. I passaggi esatti per interrompere la generazione automatica di XmlSerializers.dll sono:

  1. In VS, fai clic con il pulsante destro del mouse sul file di progetto e seleziona "Proprietà"
  2. Fai clic sulla scheda "Crea"
  3. Modifica il menu a discesa "Genera assembly di serializzazione" da "Auto" a "Off"
  4. Ricostruisci e sparirà

17
Sì, ma la domanda era perché è stato generato!
Hemant,

So che questa è una vecchia risposta, ma in VS2015 Update 3 su un'app Winforms destinata a .NET 2.0 x86 quando compilato su un sistema Win10 Ent 64 bit, anche quando l'impostazione "Genera assembly di serializzazione" su "Off", quindi * .XmlSerializers. la dll è ancora generata. La mia app fa riferimento a un servizio Web ASMX. Forse un bug nell'aggiornamento 3 VS2015?
Peter,

6

Penso che questa sia la raccolta JIT (Just in time) di serializzatori XML per motivi di prestazioni.

La stessa cosa si ottiene con le istanze RegEx utilizzando l'opzione RegexOptions.Compiled attivata.

Non sono un esperto di CLR .NET, mi dispiace per la mancanza di dettagli tecnici precisi.


5

*.XmlSerializers.dll vengono generati utilizzando Sgen.exe [XML Serializer Generator Tool]

Vedi Sgen.exe su MSDN

In genere Sgen.exeviene utilizzato negli eventi Post Build dei progetti. Verifica se il tuo progetto ha un evento post build che genera il*.XmlSerializers.dll


4

Il progetto genera solo project.XMLSerialisers.dll per le applicazioni web. Per altre applicazioni devi eseguire sgen separatamente.


1
La mia app WinForms genera MyProject.XMLSerializers.dll quando viene impostata o
attivata
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.