Méthode de localisation des assemblys par le runtime
Mise à jour : novembre 2007
Pour déployer avec succès votre application .NET Framework, vous devez comprendre comment le Common Language Runtime localise et se lie aux assemblys qui composent votre application. Par défaut, le runtime essaie de se lier avec la version exacte d'un assembly avec lequel l'application a été générée. Ce comportement par défaut peut être substitué par les paramètres du fichier de configuration.
Le Common Language Runtime procède à une série d'étapes pour essayer de localiser un assembly et de résoudre une référence d'assembly. Chaque étape est expliquée dans les sections suivantes. Le terme « détection » est souvent utilisé pour décrire la manière dont le runtime localise les assemblys ; il fait référence au jeu de paramètres heuristiques utilisé pour localiser l'assembly en fonction de son nom et de sa culture.
Remarque : |
---|
Vous pouvez afficher les informations de liaison dans le fichier journal en utilisant la visionneuse du journal des liaisons d'assembly Assembly Binding Log Viewer (Fuslogvw.exe) incluse dans le Kit de développement logiciel (SDK) Windows. |
Initiation de la liaison
Le processus de localisation et de liaison d'un assembly débute lorsque le runtime tente de résoudre une référence vers un autre assembly. Cette référence peut être statique ou dynamique. Le compilateur enregistre les références statiques dans les métadonnées du manifeste d'assembly au moment de la génération. Les références dynamiques sont construites à la volée après l'appel de plusieurs méthodes, telles que System.Reflection.Assembly.Load.
La meilleure façon de référencer un assembly est d'utiliser une référence complète, comprenant le nom de l'assembly, sa version, sa culture et son jeton de clé publique (le cas échéant). Le runtime utilise ces informations pour localiser l'assembly en suivant les étapes décrites plus loin dans cette section. Le runtime utilise le même processus de résolution, et ce que la référence pointe vers un assembly statique ou un assembly dynamique.
Vous pouvez également créer une référence dynamique à un assembly en fournissant la méthode d'appel avec seulement une partie des informations relatives à l'assembly, par exemple en spécifiant le nom de l'assembly uniquement. Dans ce cas, l'assembly n'est recherché que dans le répertoire de l'application et aucune autre vérification n'est effectuée. Une référence partielle est effectuée à l'aide de n'importe quelle méthode de chargement des assemblys telle que System.Reflection.Assembly.Load ou System.AppDomain.Load.
Enfin, vous pouvez 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 pouvez 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. Vous devez utiliser cette technique si vous souhaitez qualifier entièrement une référence à un assembly en dehors du répertoire de l'application ou si vous souhaitez référencer un assembly dans le Global Assembly Cache tout en conservant le côté pratique de la spécification de la référence complète dans le fichier de configuration 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. |
Le runtime procède aux étapes suivantes pour résoudre une référence d'assembly :
Détermine la version correcte de l'assembly en examinant les fichiers de configuration applicables, y compris le fichier de configuration de l'application, le fichier de stratégie de l'éditeur et le fichier de configuration machine. Si le fichier de configuration est situé sur un ordinateur distant, le runtime doit tout d'abord localiser et télécharger le fichier de configuration de l'application.
Vérifie si le nom de l'assembly a déjà été lié et, si tel est le cas, utilise l'assembly précédemment chargé. Si une demande précédente de chargement de l'assembly a échoué, la demande échoue immédiatement sans tentative de chargement de l'assembly.
Remarque : La mise en cache d'échecs de liaison d'assemblys est une nouveauté du .NET Framework version 2.0.
Vérifie le Global Assembly Cache. Si l'assembly s'y trouve, le runtime utilise cet assembly.
Détecte l'assembly en procédant comme suit :
Si la configuration et la stratégie de l'éditeur n'affectent pas la référence d'origine et que la demande de liaison a été créée en utilisant la méthode Assembly.LoadFrom, le runtime vérifie la présence d'indications relatives à l'emplacement.
Si une base de code est trouvée dans les fichiers de configuration, le runtime vérifie uniquement cet emplacement. Si cette détection échoue, le runtime détermine que la demande de liaison a échoué et aucune autre détection ne se produit.
Détecte l'assembly en utilisant les paramètres heuristiques décrits dans la section de détection. Si l'assembly n'est pas trouvé suite à la détection, le runtime demande à Windows Installer de fournir l'assembly (sous la forme d'une fonctionnalité d'installation à la demande).
Remarque : La vérification de la version n'a pas lieu pour les assemblys sans nom fort ; le runtime ne vérifie pas non plus dans le Global Assembly Cache la présence éventuelle d'assemblys sans nom fort.
Voir aussi
Concepts
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
Références d'assembly partielles