Wofür wird MyAssembly.XmlSerializers.dll generiert?

124

Ich arbeite an einem Projekt, das eine Baugruppe generiert. Ich habe gerade bemerkt, dass eine zusätzliche Assembly * .XmlSerializers.dll generiert wird. Warum wird diese Datei automatisch generiert und wofür wird sie verwendet?

Hemant
quelle
Ich denke, Sie wissen bereits, warum es generiert wird. Wenn nicht, wird es generiert, weil Ihr Projekt eine Art Webservice verfügbar macht. Es wird immer entweder zur Kompilierungszeit oder zur Laufzeit generiert.
Zur

Antworten:

101

In der .NET- Implementierung generiert der XmlSerializer eine temporäre Assembly zum Serialisieren / Deserialisieren Ihrer Klassen (aus Leistungsgründen). Es kann entweder im laufenden Betrieb generiert werden (es dauert jedoch bei jeder Ausführung einige Zeit) oder es kann während der Kompilierung vorgeneriert und in der von Ihnen gewünschten Assembly gespeichert werden.

Sie können dieses Verhalten in den Projektoptionen ändern (Registerkarte Kompilieren -> Erweiterte Kompilierungsoptionen -> Serialisierungsassemblys generieren , Auto bzw. Ein ). Das entsprechende Element in der Projektdatei ist GenerateSerializationAssemblies zum Beispiel <GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>.

Grzenio
quelle
21
Wenn es generiert wird, wenn die Projekteinstellung Auto ist, bedeutet das, dass es benötigt wird? Was passiert, wenn Sie die X.XMLSerializers.dll nicht mit der Anwendung bereitstellen. Wird sie im laufenden Betrieb generiert?
Rory
3
Wie geht man also vor, um diese Baugruppen vorzuladen?
Carlo
1
@ Rory, ich weiß, dass diese Frage alt ist, aber das scheint der Fall zu sein. Drei meiner Projekte waren auf eingestellt Auto, aber nur eines hat eine Serialisierungs-DLL erstellt.
ps2goat
4
**Generate Serialization Assemblies** Specifies whether the compiler will use the XML Serializer Generator Tool (Sgen.exe) to create XML serialization assemblies. Serialization assemblies can improve the startup performance of XmlSerializer if you have used that class to serialize types in your code. By default, this option is set to Auto, which specifies that serialization assemblies be generated only if you have used XmlSerializer to encode types in your code to XML. msdn.microsoft.com/en-us/library/kb4wyys2.aspx
ps2goat
2
Manuelle Änderung von VS2015: Klicken Sie mit der rechten Maustaste auf den Projektnamen -> Eigenschaften -> Erstellen -> (Bildlauf nach unten). Generieren Sie eine Serialisierungsassembly.
Eido95
54

Zu Ihrer Information. Die genauen Schritte, um zu verhindern, dass die XmlSerializers.dll automatisch generiert wird, sind:

  1. Klicken Sie in VS mit der rechten Maustaste auf Ihre Projektdatei und wählen Sie "Eigenschaften".
  2. Klicken Sie auf die Registerkarte "Erstellen"
  3. Ändern Sie die Dropdown-Liste "Serialisierungsbaugruppe generieren" von "Auto" in "Aus".
  4. Wiederaufbau und es wird weg sein
jontsnz
quelle
17
Ja, aber die Frage war, warum es generiert wird!
Hemant
Ich weiß, dass dies eine alte Antwort ist, aber in VS2015 Update 3 auf einer Winforms-App, die auf .NET 2.0 x86 abzielt, wenn es auf einem Win10 Ent 64-Bit-System kompiliert wurde, selbst wenn die Dropdown-Liste "Serialisierungsassembly generieren" auf "Aus" und dann auf * .XmlSerializers gesetzt ist. DLL wird noch generiert. Meine App verweist auf einen ASMX-Webdienst. Möglicherweise ein Fehler in VS2015 Update 3?
Peter
6

Ich denke, dies ist die JIT-Kompilierung (Just in Time) von XML-Serialisierern aus Leistungsgründen.

Dasselbe erhalten Sie mit RegEx-Instanzen, wenn die Option RegexOptions.Compiled aktiviert ist.

Ich bin kein .NET CLR-Experte, entschuldige den Mangel an genauen technischen Details.

Alan Christensen
quelle
5

*.XmlSerializers.dll werden mit dem Sgen.exe [XML Serializer Generator Tool] generiert

Siehe Sgen.exe auf MSDN

In der Regel Sgen.exewird das in Post-Build-Ereignissen von Projekten verwendet. Überprüfen Sie, ob Ihr Projekt ein Post-Build-Ereignis hat, das das generiert*.XmlSerializers.dll

abhilash
quelle
4

Das Projekt generiert nur die Datei project.XMLSerialisers.dll für Webanwendungen. Für andere Anwendungen müssen Sie sgen separat ausführen.

Malcolm
quelle
1
Meine WinForms-App generiert MyProject.XMLSerializers.dll, wenn die Einstellung aktiviert ist oder automatisch
Kevin Driedger