Pregunta

Estoy usando un XmlSerializer para deserializar un tipo particular de mscorelib.dll

XmlSerializer ser = new XmlSerializer( typeof( [.Net type in System] ) );
return ([.Net type in System]) ser.Deserialize( new StringReader( xmlValue ) );

Esto arroja una atrapado FileNotFoundException cuando la asamblea se carga:

"No se puede cargar el archivo o ensamblado 'mscorlib.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 " o una de sus dependencias.El sistema no puede encontrar el archivo especificado".

FusionLog:

=== Pre-bind state information ===
LOG: User = ###
LOG: DisplayName = mscorlib.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
 (Fully-specified)
LOG: Appbase = file:///C:/localdir
LOG: Initial PrivatePath = NULL
Calling assembly : System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\localdir\bin\Debug\appname.vshost.exe.Config
LOG: Using machine configuration file from c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: mscorlib.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
LOG: Attempting download of new URL file:///C:/localdir/bin/Debug/mscorlib.XmlSerializers.DLL.
LOG: Attempting download of new URL file:///C:/localdir/bin/Debug/mscorlib.XmlSerializers/mscorlib.XmlSerializers.DLL.
LOG: Attempting download of new URL file:///C:/localdir/bin/Debug/mscorlib.XmlSerializers.EXE.
LOG: Attempting download of new URL file:///C:/localdir/bin/Debug/mscorlib.XmlSerializers/mscorlib.XmlSerializers.EXE.

Que yo sepa no hay mscorlib.XmlSerializers.DLL creo que el nombre de la DLL de la abeja auto generado por .Net buscando el serializador.

Usted tiene la opción de crear un myApplication.XmlSerializers.DLL al compilar para optimizar serializations, así que supongo que esto es parte del marco de la comprobación de la misma.

El problema es que esta parece ser la causa del retraso en la carga de la aplicación - que parece colgar de un par de segundos en este punto.

Alguna idea de cómo evitar este o acelerarlo?

¿Fue útil?

Solución

Supongo que ahora.pero:

  1. El sistema podría estar generando un serializador para el conjunto de mscorlib, que podría ser muy lenta.
  2. Probablemente se podría evitar esta envolviendo el tipo de sistema en su propio tipo y serialising que en su lugar, a continuación, obtendrá un serializador para su propia asamblea.
  3. Usted podría ser capaz de construir el serializador para mscorlib con sgen.exe, que era el antiguo camino de la construcción de serializador dll antes estuvo integrado en VS.

Otros consejos

El retraso es porque, después de haber sido incapaz de encontrar el serializador personalizado dll, el sistema está construyendo el código equivalente (que es muy lento) sobre la marcha.

La manera de evitar el retraso es para que el sistema genere el archivo DLL, y asegúrese de que está disponible para el .EXE - ¿has probado esto?

Bueno, así que me encontré con este problema y ha encontrado una solución específica para mi área.

Esto ocurrió debido a que yo estaba tratando de serializar una lista en un documento XML (archivo) sin un XML raíz de atributo.Una vez que he añadido los siguientes archivos, el error desaparece.

XmlRootAttribute rootAttribute = new XmlRootAttribute();
rootAttribute.ElementName = "SomeRootName";
rootAttribute.IsNullable = true;

No sé si se van a solucionar su problema, pero fijo de la mina.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top