Folosesc un XmlSerializer pentru a deserializa un anumit tip din mscorelib.dll
XmlSerializer ser = new XmlSerializer( typeof( [.Net type in System] ) );
return ([.Net type in System]) ser.Deserialize( new StringReader( xmlValue ) );
Aceasta aruncă un FileNotFoundException
capturat când ansamblul este încărcat:
"Nu s-a putut încărca fișierul sau ansamblul „mscorlib.XmlSerializers, Versiunea = 2.0.0.0, Cultura = neutră, PublicKeyToken = b77a5c561934e089 'sau una dintre dependențele sale. Sistemul nu poate găsi fișierul specificat. "
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.
Din câte știu, nu există mscorlib.XmlSerializers.DLL, cred că numele DLL a fost generat automat de către .Net în căutarea serializatorului.
Aveți opțiunea de a crea o aplicație myApplication.XmlSerializers.DLL când compilați pentru a optimiza serializările, așadar presupun că aceasta face parte din verificarea cadrului pentru aceasta.
Problema este că acest lucru pare să provoace o întârziere în încărcarea aplicației - pare să stea pentru câteva secunde în acest moment.
Orice idei cum să evitați acest lucru sau să-l accelerați?
Întârzierea este că, deoarece nu a reușit să găsească serializatorul dll personalizat, sistemul construiește codul echivalent (care consumă foarte mult timp) în zbor.
Modul de a evita întârzierea este să aveți sistemul să construiască DLL-ul și să vă asigurați că este disponibil pentru .EXE - ați încercat asta?
Acum ghicesc. dar:
Bine, am intrat în această problemă și am găsit o soluție specifică zonei mele.
Acest lucru sa întâmplat deoarece am încercat să serializez o listă într-un document XML (fișier) fără un atribut root al XML. Odată ce am adăugat următoarele fișiere, eroarea dispare.
XmlRootAttribute rootAttribute = new XmlRootAttribute();
rootAttribute.ElementName = "SomeRootName";
rootAttribute.IsNullable = true;
Nu, dacă îți va rezolva problema, dar mi-a rezolvat problema.