Gestion des versions des assemblies du GAC par ASP.NET
Le GAC nous permet de partager des assemblies entre plusieurs applications ASP.NET. La gestion des versions des ces assemblies en est aussi facilitée à condition de bien comprendre la différence entre Assembly version et File version.
Allez hop... Petite explication !
Lors de la mise à jour d’une assembly nous avons le choix entre changer l’Assembly version et la File version
Pour illustrer les deux possibilités, prenons l’exemple de plusieurs sites Web utilisant une même assembly dans le GAC (Assembly V1.0.0.0 / File V1.0.0.0). Les Web.config des applications ASP.NET utilisent :
Possibilité 1 : Modification mineure = Correctif
Nous mettons à jour cette assembly dans la GAC en gardant la même Assembly version mais en changeant la File version (Assembly V1.0.0.0 / File V1.1.0.0)
- Dans la GAC, nous avons maintenant seulement la nouvelle assembly (Assembly V1.0.0.0 / File V1.1.0.0). Cette nouvelle assembly remplace la précédente car nous avons la même Assembly version. En effet, dans la GAC, deux assemblies du même nom ne peuvent pas avoir la même Assembly version
- Les applications en cours d’exécution utilisent toujours la version précédente (Assembly V1.0.0.0 / File V1.0.0.0) car pour elles rien ne leur indique un changement (le web.config n’a pas changé)
- Si l’appDomain redémarre : c'est-à-dire si l’application Web redémarre suite à une modification du Web.config par exemple, la nouvelle version n’est toujours pas chargée car l’ancienne est en mémoire dans le processus W3WP.EXE qui n’a pas redémarré
- Si le processus W3WP.EXE redémarre suite à un recyclage, un crash, alors la CLR va chercher dans le GAC la dll et prend la nouvelle version
Possibilité 2 : Modification majeure = Nouvelle version
Nous mettons à jour cette assembly dans la GAC en changeant le numéro de l’Assembly version (Assembly V2.0.0.0)
- Dans la GAC, nous voyons maintenant les deux assemblies
- Les applications en cours d’exécution utiliseront toujours l’Assembly version 1.0.0.0 tant que le web.config n’est pas modifié pour mentionner le changement de version :
- Comme modifions le Web.config, l’appDomain redémarre (sans redémarrage du processus W3WP.EXE) et prend en charge la nouvelle version
Conclusion en images :-)
Changement File version | |
Redémarrage W3WP.EXE | Prise en compte de la nouvelle version |
Modification Web.config | Aucun changement |
Changement Assembly version | |
Redémarrage W3WP.EXE | Aucun changement |
Modification Web.config | Prise en compte de la nouvelle version |
J’espère que ces éclaircissements vous aideront dans vos déploiements en production. A bientôt,
Sebastien.
Comments
- Anonymous
April 29, 2009
PingBack from http://asp-net-hosting.simplynetdev.com/gestion-des-versions-des-assemblies-du-gac-par-aspnet/