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?
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?
Réponses:
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>
.
Auto
, mais un seul a créé une DLL de sérialisation.
**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
FYI. Les étapes exactes pour empêcher la génération automatique de XmlSerializers.dll sont les suivantes:
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.
*.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.exe
est 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
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.