2009-06-01 3 views
109

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 a cosa serve?Per cosa viene generato MyAssembly.XmlSerializers.dll?

+0

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

risposta

84

In .NET attuazione, la XmlSerializer genera un assemblaggio temporaneo per la serializzazione/deserializzazione vostre classi (per motivi di prestazioni). Può essere generato al volo (ma richiede del tempo ad ogni esecuzione), oppure può essere pregenerato durante la compilazione e salvato in questo assembly di cui si sta chiedendo.

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

+17

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

+1

Quindi, come si fa a precaricare questi assembly? – Carlo

+0

@Rory, so che questa domanda è vecchia, ma sembra essere il caso. Tre dei miei progetti erano impostati su 'Auto', ma solo uno creava una DLL di serializzazione. – ps2goat

6

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

Si ottiene la stessa cosa con le istanze di RegEx utilizzando l'opzione RegexOptions.Compiled attivata.

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

5

*.XmlSerializers.dll sono generati utilizzando lo Sgen.exe [Serializzatore XML Generator Tool]

Vedi Sgen.exe on MSDN

In genere il Sgen.exe viene utilizzato in post costruire eventi di progetti. Verifica se il tuo progetto ha un post evento accumulo che genera la *.XmlSerializers.dll

45

FYI. I passaggi esatti per fermare il XmlSerializers.dll venga generato automaticamente sono:

  1. In VS, fare clic destro il file di progetto e selezionare "Proprietà"
  2. Fare clic sulla scheda "Build"
  3. Cambiare la "genera assembly di serializzazione" discesa da "Auto" su "Off"
  4. Ricostruire e sarà andato
+14

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

+0

So che si tratta di una vecchia risposta, ma in VS2015 Update 3 su un'app Winforms che ha come target .NET 2.0 x86 quando è compilato su un sistema a 64 bit Win10 Ent, anche quando l'impostazione "Genera assembly serialization" su "Off" quindi su * .XmlSerializers .dll è ancora generato. La mia app fa riferimento a un servizio web ASMX. Forse un bug in VS2015 Update 3? – Peter

4

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

+1

La mia app WinForms genera MyProject.XMLSerializers.dll quando l'impostazione è attiva o automatica –