Frage

Ich verwende einen XmlSerializer, um einen bestimmten Typ in mscorelib.dll zu deserialisieren

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

Dies wirft einen Haken FileNotFoundException Wenn die Assembly geladen ist:

"Konnte keine Datei oder Assemblierung 'mscorlib.xmlSerializers, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = B77A5C561934E089' oder eine seiner Abhängigkeiten laden.Die angegebene Datei wurde vom System nicht gefunden."

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.

Soweit ich weiß, gibt es keine mscorlib.XmlSerializers.DLL. Ich denke, der DLL-Name wurde automatisch von .Net generiert, das nach dem Serializer sucht.

Sie haben die Möglichkeit, beim Kompilieren eine myApplication.XmlSerializers.DLL zu erstellen, um Serialisierungen zu optimieren. Ich gehe daher davon aus, dass dies Teil der Überprüfung durch das Framework ist.

Das Problem besteht darin, dass dies offenbar zu einer Verzögerung beim Laden der Anwendung führt – sie scheint an dieser Stelle einige Sekunden lang hängen zu bleiben.

Irgendwelche Ideen, wie man das vermeiden oder beschleunigen kann?

War es hilfreich?

Lösung

Ich vermute jetzt.Aber:

  1. Das System generiert möglicherweise einen Serialisierer für die gesamte mscorlib, was sehr langsam sein kann.
  2. Sie könnten dies wahrscheinlich vermeiden, indem Sie den Systemtyp in Ihren eigenen Typ einschließen und diesen stattdessen serialisieren. Dann erhalten Sie einen Serialisierer für Ihre eigene Assembly.
  3. Möglicherweise können Sie den Serializer für mscorlib mit sgen.exe erstellen. Dies war die alte Methode zum Erstellen von Serializer-DLLs, bevor sie in VS integriert wurde.

Andere Tipps

Die Verzögerung liegt daran, dass das System den entsprechenden Code spontan erstellt (was sehr zeitaufwändig ist), da es die benutzerdefinierte Serialisierungs-DLL nicht finden konnte.

Die Möglichkeit, die Verzögerung zu vermeiden, besteht darin, das System die DLL erstellen zu lassen und sicherzustellen, dass sie für die .EXE-Datei verfügbar ist. Haben Sie das schon versucht?

Okay, ich bin auf dieses Problem gestoßen und habe eine Lösung speziell für meinen Bereich gefunden.

Dies geschah, weil ich versuchte, eine Liste in ein XML-Dokument (Datei) ohne XML-Root-Attribut zu serialisieren.Sobald ich die folgenden Dateien hinzugefügt habe, verschwindet der Fehler.

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

Ich weiß nicht, ob es Ihr Problem beheben wird, aber es hat mein Problem behoben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top