À quoi sert MyAssembly.XmlSerializers.dll?

124

Je travaille sur un projet qui génère un assemblage. Je viens de remarquer qu'un assembly supplémentaire * .XmlSerializers.dll est en cours de génération. Pourquoi ce fichier est-il généré automatiquement et à quoi sert-il?

Hemant
la source
Je pense que vous savez déjà pourquoi il est généré. sinon, il est généré car votre projet expose une sorte de webservice. il est toujours généré pendant la compilation ou pendant l'exécution. à l'exécution, il est généré dans le dossier Temp avec un nom aléatoire
AaA

Réponses:

101

Dans l' implémentation .NET , XmlSerializer génère un assembly temporaire pour sérialiser / désérialiser vos classes (pour des raisons de performances). Il peut être soit généré à la volée (mais cela prend du temps à chaque exécution), soit il peut être prégénéré lors de la compilation et sauvegardé dans cet assemblage dont vous parlez.

Vous pouvez modifier ce comportement dans les options du projet (onglet Compiler -> Options de compilation avancées -> Générer des assemblys de sérialisation , Auto ou On , respectivement). L'élément correspondant dans le fichier de projet est GenerateSerializationAssemblies , par exemple, <GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>.

Grzenio
la source
21
S'il est généré lorsque le paramètre du projet est Auto, cela signifie-t-il qu'il est nécessaire? que se passe-t-il si vous ne déployez pas le X.XMLSerializers.dll avec l'application, sera-t-il généré à la volée?
Rory
3
Alors, comment pré-charger ces assemblages?
Carlo
1
@Rory, je sais que cette question est ancienne, mais cela semble être le cas. Trois de mes projets étaient définis sur Auto, mais un seul a créé une DLL de sérialisation.
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
Modification manuelle VS2015: clic droit sur le nom du projet -> Propriétés -> Construire -> (Faire défiler vers le bas) Générer l'assemblage de sérialisation.
Eido95
54

FYI. Les étapes exactes pour empêcher la génération automatique de XmlSerializers.dll sont les suivantes:

  1. Dans VS, faites un clic droit sur votre fichier projet et sélectionnez "Propriétés"
  2. Cliquez sur l'onglet "Construire"
  3. Changez le menu déroulant "Générer l'assemblage de sérialisation" de "Auto" à "Désactivé"
  4. Reconstruisez et il sera parti
jontsnz
la source
17
Ouais, mais la question était de savoir pourquoi il est généré!
Hemant
Je sais que c'est une vieille réponse, mais dans VS2015 Update 3 sur une application Winforms ciblant .NET 2.0 x86 lorsqu'elle est compilée sur un système Win10 Ent 64 bits, même lorsque le paramètre "Générer l'assemblage de sérialisation" déroulant sur "Off", puis les * .XmlSerializers. dll est toujours généré. Mon application fait référence à un service Web ASMX. Peut-être un bogue dans VS2015 Update 3?
Peter
6

Je pense que c'est la compilation JIT (Just in time) de serialiseurs XML pour des raisons de performances.

Vous obtenez la même chose avec les instances RegEx en utilisant l'option RegexOptions.Compiled activée.

Je ne suis pas un expert .NET CLR, désolé pour le manque de détails techniques précis.

Alan Christensen
la source
5

*.XmlSerializers.dll sont générés à l'aide de Sgen.exe [XML Serializer Generator Tool]

Voir Sgen.exe sur MSDN

En règle générale, le Sgen.exeest utilisé dans les événements de post-génération des projets. Vérifiez si votre projet a un événement post build qui génère le*.XmlSerializers.dll

Abhilash
la source
4

Le projet génère uniquement le project.XMLSerialisers.dll pour les applications Web. Pour les autres applications, vous devez exécuter sgen séparément.

Malcolm
la source
1
Mon application WinForms génère MyProject.XMLSerializers.dll lors de la mise en marche ou automatique
Kevin Driedger