¿Para qué se genera MyAssembly.XmlSerializers.dll?

124

Estoy trabajando en un proyecto que genera un ensamblaje. Acabo de notar que se está generando un ensamblado adicional * .XmlSerializers.dll. ¿Por qué este archivo se genera automáticamente y para qué se utiliza?

Hemant
fuente
Creo que ya sabes por qué se genera. si no, se genera porque su proyecto está exponiendo una especie de servicio web. siempre se genera durante el tiempo de compilación o durante el tiempo de ejecución. en tiempo de ejecución que se genera en la carpeta Temp con un nombre aleatorio
AaA

Respuestas:

101

En la implementación de .NET , XmlSerializer genera un ensamblado temporal para serializar / deserializar sus clases (por razones de rendimiento). Puede generarse sobre la marcha (pero lleva tiempo en cada ejecución), o puede pregenerarse durante la compilación y guardarse en este ensamblado sobre el que está preguntando.

Puede cambiar este comportamiento en las opciones del proyecto (pestaña Compilar -> Opciones de compilación avanzadas -> Generar conjuntos de serialización , Automático u Activado , respectivamente). El elemento correspondiente en el archivo de proyecto es GenerateSerializationAssemblies , por ejemplo, <GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>.

Grzenio
fuente
21
Si se genera cuando la configuración del proyecto es Auto, ¿eso significa que es necesario? ¿Qué sucede si no implementa X.XMLSerializers.dll con la aplicación? ¿Se generará sobre la marcha?
Rory
3
Entonces, ¿cómo se hace para precargar estos ensamblajes?
Carlo
1
@Rory, sé que esta pregunta es antigua, pero ese parece ser el caso. Tres de mis proyectos estaban configurados Auto, pero solo uno creó una DLL de serialización.
ps2goat
44
**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
Cambio manual de VS2015: haga clic con el botón derecho en el nombre del proyecto -> Propiedades -> Construir -> (Desplazarse hacia abajo) Generar conjunto de serialización.
Eido95
54

FYI. Los pasos exactos para detener la generación automática de XmlSerializers.dll son:

  1. En VS, haga clic derecho en su archivo de proyecto y seleccione "Propiedades"
  2. Haga clic en la pestaña "Crear"
  3. Cambie el menú desplegable "Generar ensamblaje de serialización" de "Auto" a "Desactivado"
  4. Reconstruir y se habrá ido
jontsnz
fuente
17
Sí, pero la pregunta era por qué se genera.
Hemant
Sé que esta es una respuesta anterior, pero en VS2015 Update 3 en una aplicación Winforms dirigida a .NET 2.0 x86 cuando se compila en un sistema Win10 Ent de 64 bits, incluso cuando el menú desplegable "Generar ensamblaje de serialización" está en "Apagado" y luego en los * .XmlSerializers. dll todavía se genera. Mi aplicación hace referencia a un servicio web ASMX. Tal vez un error en VS2015 Actualización 3?
Peter
6

Creo que esta es la compilación JIT (Just in time) de serializadores XML por razones de rendimiento.

Obtiene lo mismo con las instancias RegEx utilizando la opción RegexOptions.Compiled activada.

No soy un experto en .NET CLR, perdón por la falta de detalles técnicos precisos.

Alan Christensen
fuente
5

*.XmlSerializers.dll se generan utilizando Sgen.exe [Herramienta de generador de serializador XML]

Ver Sgen.exe en MSDN

Normalmente, Sgen.exese utiliza en eventos posteriores a la compilación de proyectos. Vea si su proyecto tiene un evento posterior a la compilación que genera el*.XmlSerializers.dll

abhilash
fuente
4

El proyecto solo genera el project.XMLSerialisers.dll para aplicaciones web. Para otras aplicaciones, debe ejecutar sgen por separado.

Malcolm
fuente
1
Mi aplicación WinForms genera MyProject.XMLSerializers.dll cuando se configura o se
activa