Références d'assembly partielles
Mise à jour : novembre 2007
Une référence d'assembly complète comprend le nom, la version, la culture et le jeton de clé publique de l'assembly (si l'assembly a un nom fort). Une référence d'assembly complète est requise si vous référencez un assembly appartenant au Common Language Runtime ou situé dans le Global Assembly Cache. Vous pouvez également référencer un assembly dynamiquement en fournissant uniquement une partie des informations, par exemple en spécifiant le nom de l'assembly seulement.
L'utilisation de références d'assembly partielles n'est pas recommandée, car elle peut entraîner de nombreux problèmes de versioning :
Il se peut que les versions de l'assembly ne soient pas compatibles en amont. Par exemple, il se peut que votre code fonctionne avec la version 1.6 de l'assembly, mais que vous obteniez une version ultérieure comprenant une modification incompatible du fait de la référence d'assembly partielle.
Il se peut que les versions de l'assembly ne soient pas compatibles en aval. Par exemple, il se peut que votre code fonctionne avec la version 1.6 de l'assembly, mais que vous obteniez une version antérieure ne disposant pas du code nécessaire du fait de la référence d'assembly partielle.
Une application qui installe une nouvelle version d'un assembly peut fractionner les applications utilisant des références d'assembly partielles pour charger l'assembly, si la nouvelle version n'est pas compatible.
Les problèmes de versioning éventuels sont si nombreux que la méthode LoadWithPartialName est marquée comme obsolète dans le .NET Framework version 2.0.
Création de références d'assembly partielles
Vous pouvez créer des références partielles à un assembly dans votre code de l'une des manières suivantes :
Utilisez une méthode telle que System.Reflection.Assembly.Load et spécifiez seulement une référence partielle. Le runtime recherche l'assembly dans le répertoire de l'application.
Utilisez la méthode System.Reflection.Assembly.LoadWithPartialName et spécifiez uniquement une référence partielle. Le runtime recherche l'assembly dans le répertoire de l'application et dans le Global Assembly Cache.
Remarque : |
---|
La méthode LoadWithPartialName est obsolète dans la version 2.0 du .NET Framework. |
L'utilisation de la méthode LoadWithPartialName peut introduire une notion de variabilité dans le processus de liaison. Par exemple, si vous demandez une liaison à un assembly avec un nom fort sans inclure la clé publique dans votre référence, vous n'avez aucune assurance que l'assembly auquel vous vous liez provient de l'éditeur attendu. De plus, les références qui n'incluent pas de jeton de clé publique n'étant pas sujettes à la stratégie de version, les fichiers de configuration de l'application et machine ne sont donc jamais vérifiés. Les références partielles qui utilisent la méthode LoadWithPartialName fonctionnent parfaitement dans des scénarios lorsque vous souhaitez sélectionner la dernière version d'un assembly.
Références partielles à l'aide de la méthode LoadWithPartialName
Remarque : |
---|
La méthode LoadWithPartialName est obsolète dans la version 2.0 du .NET Framework. |
Un appel à la méthode LoadWithPartialName doit inclure au moins le nom de l'assembly, mais peut également inclure le jeton de clé publique, la version ou la culture. Étant donné que vous utilisez une méthode qui n'attend qu'une référence partielle, il est inutile d'inclure des informations de référence complètes (nom, version, culture et, le cas échéant, jeton de clé publique).
Lorsque vous référencez partiellement un assembly à l'aide de la méthode LoadWithPartialName, le runtime utilise des règles spécifiques pour localiser l'assembly référencé. Ces règles sont les suivantes :
Le runtime recherche des informations de qualification dans le fichier de configuration de l'application pour la référence dans l'élément <qualifyAssembly>. Si une entrée valide est trouvée, la liaison se poursuit comme dans le cas d'une référence complète.
Ensuite, le runtime recherche, dans le répertoire de l'application, un assembly qui correspond au nom de l'assembly spécifié. Si une correspondance est trouvée, le runtime utilise cet assembly.
Si aucune correspondance n'est trouvée dans le répertoire de l'application, le runtime recherche l'assembly dans le Global Assembly Cache. Si le jeton de clé publique, la version ou la culture sont spécifiés dans la référence partielle, le runtime tente de trouver la correspondance exacte de cette valeur. Si aucune version n'est spécifiée, le runtime tente de trouver l'assembly avec le numéro de version le plus élevé et correspondant aux autres critères spécifiés. Si la culture ou le jeton de clé publique ne sont pas spécifiés, le comportement du runtime n'est pas défini.
Par exemple, supposons que l'appel à Assembly.LoadWithPartialName("math, Version 5.0.0.0") est effectué et que le contenu du Global Assembly Cache est le suivant :
math,version=5.0.0.0,publicKeyToken=11111111,culture=de math,version=5.0.0.0,publicKeyToken=22222222,culture=en
Le résultat de l'appel n'est pas défini. Le runtime sélectionne le premier assembly qu'il rencontre.
Dans le cadre d'un autre exemple, supposons que l'appel à Assembly.LoadWithPartialName("math") est effectué et que le contenu du Global Assembly Cache est le suivant :
math,version=5.0.0.0,publicKeyToken=11111111,culture=neutral math,version=6.0.0.0,publicKeyToken=22222222,culture=neutral
Le résultat de l'appel est une liaison à l'assembly mathématique, version 6.0.0.0.
En dernier exemple, supposons qu'un appel Assembly.LoadWithPartialName("math,publicKeyToken=11111111") est effectué et que le contenu du Global Assembly Cache est le suivant :
math,version=5.0.0.0,publicKeyToken=11111111,culture=neutral math,version=6.0.0.0,publicKeyToken=22222222,culture=neutral
Le résultat de l'appel est une liaison à l'assembly mathématique, version 5.0.0.0.
Références partielles avec des informations de qualification
Vous pouvez également créer une référence dynamique à l'aide d'une méthode telle que System.Reflection.Assembly.Load et fournir uniquement des informations partielles ; vous devez ensuite qualifier la référence à l'aide de l'élément <qualifyAssembly> dans le fichier de configuration de l'application. Cet élément vous permet de fournir les informations de référence complètes (nom, version, culture et, le cas échéant, jeton de clé publique) dans le fichier de configuration de votre application plutôt que dans votre code.
Remarque : |
---|
Ce type de référence partielle ne doit pas être utilisé avec des assemblys partagés par plusieurs applications. Les paramètres de configuration étant appliqués par application et non par assembly, un assembly partagé utilisant ce type de référence partielle nécessite que chaque application utilisant l'assembly partagé possède les informations de qualification dans son fichier de configuration. |
Voir aussi
Concepts
Méthode de localisation des assemblys par le runtime
Scénarios de déploiement pour les applications .NET Framework
Étape 1 : examen des fichiers de configuration
Étape 2 : recherche des assemblys précédemment référencés
Étape 3 : vérification du Global Assembly Cache
Étape 4 : localisation de l'assembly par le biais des codes base ou de la détection