¿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?


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>.


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

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.


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


4

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


1
Mi aplicación WinForms genera MyProject.XMLSerializers.dll cuando se configura o se
activa
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.