web-dev-qa-db-fra.com

Pourquoi MyAssembly.XmlSerializers.dll est-il généré?

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

122
Hemant

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 généré à la volée (mais cela prend du temps à chaque exécution), ou il peut être prégénéré lors de la compilation et enregistré dans cet assemblage que vous demandez.

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

97
Grzenio

Pour info. 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 de projet et sélectionnez "Propriétés"
  2. Cliquez sur l'onglet "Build"
  3. Modifiez la liste déroulante "Générer l'assemblage de sérialisation" de "Auto" à "Désactivée"
  4. Reconstruisez et ce sera parti
54
jontsnz

Je pense que c'est la compilation JIT (juste à temps) de sérialiseurs 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.

6
Alan Christensen

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

Voir Sgen.exe sur MSDN

Généralement, le Sgen.exe est utilisé dans les événements de post-génération de projets. Vérifiez si votre projet a un événement post-génération qui génère le *.XmlSerializers.dll

5
abhilash

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.

4
Malcolm