Déploiement de composants versionnés
Pour illustrer la configuration d'applications de façon à utiliser des composants partagés (soit les plus récents, soit ceux connus comme étant compatibles), vous devez installer les deux versions 2.0 de Reverser.dll dans le cache de l'assembly, à l'aide du fichier Build.bat qui utilise l'outil Global Assembly Cache Tool (Gacutil.exe) :
gacutil.exe /i Reverser.dll
Après avoir installé ces assemblys Reverser, vous pouvez examiner le cache de l'assembly en naviguant jusqu'au répertoire \WindowsDirectory\Assembly et en utilisant l'extension du shell de la visionneuse du cache :
À présent, vous êtes prêt à compiler le fichier exécutable VerClient, pour lequel vous spécifiez la version 2.0.0.0 du composant Reverser :
csc /reference:Stringer\Stringer.dll;
... Reverser_v2.0.0.0\Reverser.dll VerClient.cs
Comme indiqué dans les sections (3) Chemin d'accès pour les composants privés et Stratégie de liaison, la recherche et la liaison à des assemblys au moment de l'exécution peuvent être contrôlées à l'aide d'un fichier de configuration de l'application. La balise BindingRedirect peut également être utilisée pour rediriger la référence vers une version différente d'un assembly avec nom fort, en substituant la nouvelle version à la version de la référence d'origine. L'option suivante indique que pour toute référence d'assembly de la version 2.0.0.0 vers la version 2.0.0.9, la version à utiliser au moment de l'exécution est 2.0.1.0 :
<bindingRedirect
oldVersion="2.0.0.0-2.0.0.9" newVersion="2.0.1.0"
/>
Ceci permet à un administrateur de reconfigurer une application sans avoir à la recompiler.
L'exemple de fichier VerClient.exe.config du sous-répertoire 5_Versioned illustre cette option.
Listing 2. Fichier de configuration pour VerClient.exe (VerClient.exe.config)
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="Stringer"/>
<publisherPolicy apply="no"/>
<dependentAssembly>
<assemblyIdentity name="Reverser"
publicKeyToken="0038acc8beadf1e5"
culture=""/>
<publisherPolicy apply="no"/>
<bindingRedirect oldVersion="2.0.0.0"
newVersion="2.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Comme une méthode d'un type dans la version 2.0.1.0 de Reverser.dll a été rendue incompatible avec la même méthode dans la version 2.0.0.0, un client compatible avec la version 2.0.0.0 qui tente d'appeler cette révision plus récente échouera. En changeant :
newVersion="2.0.0.0"
pour obtenir :
newVersion="2.0.1.0"
Vous pouvez montrer ce comportement qui entraîne une MissingMethodException. D'une façon plus générale, ce mécanisme permet à un administrateur de réparer une application de sorte qu'elle continue à s'exécuter correctement si elle est interrompue par l'installation ultérieure d'une autre application utilisant une version différente du même composant partagé.
Enfin, lorsque l'application doit être nettoyée, vous devez supprimer les fichiers de composant partagé du cache de l'assembly :
gacutil /u reverser
Ce mécanisme supprime toutes les versions d'un composant du cache de l'assembly. Si le composant est toujours situé dans le chemin d'accès privé de l'application ou dans un sous-répertoire correspondant au nom du composant, il sera ultérieurement chargé à partir de cet emplacement.
Voir aussi
Résumé de l'empaquetage et du déploiement | Annexe A : Informations supplémentaires sur l'empaquetage et le déploiement | Annexe B : Outils d'empaquetage et de déploiement