2009-06-01 14 views
109

Estoy trabajando en un proyecto que genera un ensamblaje. Me acabo de dar cuenta de que se está generando un ensamblado adicional * .XmlSerializers.dll. ¿Por qué este archivo se genera automáticamente y para qué se utiliza?¿Para qué se genera MyAssembly.XmlSerializers.dll?

+0

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

Respuesta

84

En la implementación .NET, el XmlSerializer genera un ensamblaje temporal para serializar/deserializar sus clases (por razones de rendimiento). Puede generarse sobre la marcha (pero toma 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 (ficha Compilar -> Opciones de compilación avanzadas ->generar ensamblados de serialización, Auto o En, respectivamente). El elemento correspondiente en el archivo de proyecto es GenerateSerializationAssemblies, por ejemplo, <GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>.

+17

Si se genera cuando la configuración del proyecto es Automático, ¿eso significa que es necesario? ¿Qué ocurre si no implementa X.XMLSerializers.dll con la aplicación, se generará sobre la marcha? – Rory

+1

Entonces, ¿cómo se puede precargar estos ensamblajes? – Carlo

+0

@Rory, sé que esta pregunta es antigua, pero parece ser el caso. Tres de mis proyectos se establecieron en 'Auto', pero solo uno creó una DLL de serialización. – ps2goat

6

Creo que esta es la compilación JIT (justo a tiempo) de los serializadores XML por motivos de rendimiento.

Se obtiene lo mismo con las instancias de RegEx utilizando la opción RegexOptions.Compiled activada.

No soy un experto de .NET CLR, lo siento por la falta de detalles técnicos precisos.

5

*.XmlSerializers.dll se generan utilizando el Sgen.exe [XML herramienta Generador de serializador]

Ver Sgen.exe on MSDN

Normalmente, el Sgen.exe se utiliza en Post eventos de generación de proyectos. Vea si su proyecto tiene un evento de compilación posterior que genera el *.XmlSerializers.dll

45

FYI. Los pasos exactos para detener la XmlSerializers.dll que se genere-auto son:

  1. En VS, haga clic en el archivo de proyecto y seleccione "Propiedades"
  2. Haga clic en la pestaña "Build"
  3. Cambiar el "Generar ensamblado de serialización" desplegable de "Auto" a "No"
  4. reconstruir y se habrá ido
+14

Sí, pero la pregunta era ** ¿por qué ** se genera? – Hemant

+0

Sé que esta es una respuesta anterior pero en VS2015 Actualización 3 en una aplicación Winforms que apunta a .NET 2.0 x86 cuando se compila en un sistema Win10 Ent 64bit, incluso cuando la configuración "Generar ensamblado de serialización" se despliega en "Desactivado", entonces * .XmlSerializers .dll aún se genera. Mi aplicación hace referencia a un servicio web ASMX. ¿Tal vez un error en la actualización 3 de VS2015? – Peter

4

el proyecto sólo 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 en o auto –

Cuestiones relacionadas