Domanda

Sto usando un XmlSerializer per deserializzare un particolare tipo di mscorelib.dll

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

Questo genera un pescato FileNotFoundException quando il caricamento dell'assembly:

"Impossibile caricare il file o l'assembly 'mscorlib.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' o una delle sue dipendenze.Il sistema impossibile trovare il file specificato."

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.

Per quanto ne so io non c'è mscorlib.XmlSerializers.DLL penso il nome della DLL è stata generata automaticamente dal .In rete alla ricerca per il serializzatore.

Hai l'opzione di creazione di un myApplication.XmlSerializers.DLL durante la compilazione di ottimizzare serializations, quindi presumo che questo è parte del quadro di riferimento del controllo.

Il problema è che questa sembra essere la causa di un ritardo nel caricamento dell'applicazione sembra bloccarsi per un paio di secondi, a questo punto.

Come tutte le idee per evitare questo o accelerare?

È stato utile?

Soluzione

Sto indovinando ora.ma:

  1. Il sistema potrebbe essere la generazione di un serializzatore per tutta la mscorlib, che potrebbe essere molto lento.
  2. Probabilmente si potrebbe evitare questo avvolgendo il tipo di sistema nel vostro tipo e serialising che invece - poi devi avere un serializzatore per la vostra assemblea.
  3. Si potrebbe essere in grado di costruire il serializzatore per mscorlib con sgen.exe che era il vecchio modo di costruire serializzatore dll prima di andare integrato in VS.

Altri suggerimenti

Il ritardo è perché, non essendo riuscito a trovare il serializzatore personalizzato dll, il sistema è in costruzione il codice equivalente (che è molto in termini di tempo) al volo.

Il modo per evitare il ritardo è il sistema che genera la DLL, e assicurarsi che sia disponibile per l' .EXE - hai provato questo?

Ok, mi sono imbattuto in questo problema e hanno trovato una soluzione specifica per la mia zona.

Questo si è verificato perché stavo cercando di serializzare un elenco in un documento XML (file) senza un XML attributo principale.Una volta ho aggiunto i seguenti file, l'errore scompare.

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

Non so se ti risolve il problema, ma è fissa mia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top