Je suis en train de générer une dll xmlserializer pour mon service. Il s'agit d'un gros service web - la construction prend environ 2 minutes.
Pour réduire le temps de construction, j'ai séparé la construction du xmlserializer dans un projet Makefile séparé - étant donné que l'interface ne change pas, j'ai pensé que je pourrais le compiler une fois, et ce serait tout.
Mais, ce que j'ai constaté, c'est que si je recompile le service, le xmlserializer n'est plus utilisé et le code du serializer est généré au moment de l'exécution.
Quelqu'un a-t-il vu cela ? Existe-t-il une solution de contournement ? Pourquoi le xmlserializer ne correspond-il plus à l'assemblage du service ?
Merci.
Mise à jour :
Ok, j'ai trouvé la moitié de la réponse...
Décrit l'attribut XmlSerializerVersionAttribute (qui se trouve dans le code .cs généré).
Le document dit...
Si l'infrastructure trouve un assembly avec un nom correspondant, l'assembly est chargé et l'infrastructure vérifie l'attribut XmlSerializerVersionAttribute pour une correspondance entre la version de l'assemblage trouvé et la version actuelle de l'assemblage parent . Si la version ne correspond pas, l'assemblage trouvé n'est pas utilisé. Au lieu de cela, un assemblage temporaire est généré pour la sérialisation.
Une recherche dans le code source de .Net Framework montre que le ParentAssemblyId est en fait l'identifiant de la version du module, à savoir
Assembly.GetExecutingAssembly().GetModules()[0].ModuleVersionId
Cependant, si je charge manuellement l'assemblage xmlserializer et que je modifie le champ ParentAssemblyId de l'attribut, cela ne fonctionne toujours pas. Je suppose que le framework charge sa propre copie de l'assemblage serializer.