FileNotFoundException pentru mscorlib.XmlSerializers.DLL, care nu există

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?

0
fr hi bn
Tipul cu care mă confrunt este RSAParameters care este folosit ca parte în cazul unor chestii de criptare a sistemului. Am lucrat în jurul valorii de acum prin depozitarea cheii criptate prin alte mijloace și crearea unui nou RSAParameters mine. Se pare ca un lucru destul de obisnuit de a dori sa se serializeze (adica chei de criptare/decriptare).
adăugat autor Keith, sursa
Am întâlnit această problemă în timp ce încercam să rulez instrumentul de testare Ranorex. Am o soluție pentru moment, dar nu a reușit să o repare, iar sprijinul lor trebuie să mă contacteze încă. : - /
adăugat autor Dan Csharpster, sursa

2 răspunsuri

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

0
adăugat
Multumesc @ Will Dean, asta e ceea ce m-am gândit, dar pare prea lent chiar și pentru asta. Dacă ar fi o adunare proprie care creează ansamblul de serializare nu ar trebui să fie o problemă, dar cum aș face asta pentru mscorlib?
adăugat autor Keith, sursa

Acum ghicesc. dar:

  1. Sistemul ar putea genera un serializator pentru întreaga mscorlib, care ar putea fi foarte lent.
  2. Ați putea evita probabil acest lucru prin împachetarea tipului de sistem în propriul dvs. tip și serializând în schimb acest lucru - atunci veți obține un serializator pentru propria dvs. asamblare.
  3. S-ar putea să puteți construi serializatorul pentru mscorlib cu sgen.exe, care a fost vechiul mod de a construi dll-uri serializer înainte de a fi integrat în VS.
0
adăugat
Multumesc din nou. Cred că este (1), dar nu pot face (2), deoarece este un struct. Voi încerca (3)
adăugat autor Keith, sursa
> dar nu pot face (2), deoarece este un struct. Știu că sunt diminuată aici, dar care este problema cu structura - evident că ar putea exista o copiere suplimentară, dar relativ la costurile de serializare xml pare puțin probabil că este foarte semnificativ. Care este tipul de sistem.xx oricum?
adăugat autor Will Dean, sursa