Noms d’assembly
Le nom d’un assembly est stocké dans des métadonnées, et il a un impact significatif sur l’étendue de l’assembly et sur son utilisation dans une application. Un assembly avec nom fort a un nom complet qui inclut le nom, la culture, la clé publique, le numéro de version et facultativement l’architecture du processeur de l’assembly. Utilisez la propriété FullName pour obtenir le nom complet, également appelé nom d’affichage, des assemblys chargés.
Le runtime utilise les informations du nom pour localiser l’assembly et le différencier des autres assemblys portant le même nom. Par exemple, un assembly avec un nom fort appelé myTypes
peut avoir le nom qualifié complet suivant :
myTypes, Version=1.0.1234.0, Culture=en-US, PublicKeyToken=b77a5c561934e089c, ProcessorArchitecture=msil
Dans cet exemple, le nom complet indique que l’assembly myTypes
a un nom fort avec un jeton de clé publique, a la culture Anglais (États-Unis) et a le numéro de version 1.0.1234.0. L’assembly a l’architecture de processeur msil
, ce qui signifie qu’il sera compilé juste-à-temps (JIT) en code 32 bits ou 64 bits, en fonction du système d’exploitation et du processeur.
Conseil
Les informations ProcessorArchitecture
autorisent les versions des assemblys propres au processeur. Vous pouvez créer des versions d’un assembly dont l’identité diffère seulement par l’architecture de processeur, par exemple des versions spécifiques à des processeurs 32 bits et 64 bits. L’architecture de processeur n’est pas obligatoire pour les noms forts. Pour plus d’informations, consultez AssemblyName.ProcessorArchitecture.
Le code qui demande des types dans un assembly doit utiliser un nom d’assembly qualifié complet. Ceci s’appelle une liaison qualifiée complète. L’utilisation d’une liaison partielle, qui spécifie seulement un nom d’assembly, n’est pas autorisée pour référencer des assemblys dans .NET Framework.
Toutes les références d’un assembly à des assemblys qui composent .NET Framework doivent également contenir le nom complet de l’assembly. Par exemple, une référence à l’assembly System.Data dans la version 1.0 de .NET Framework doit inclure :
System.data, version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
La version correspond au numéro de version de tous les assemblys .NET Framework fournis avec .NET Framework version 1.0. Pour les assemblys .NET Framework, la valeur de culture est toujours neutre, et la clé publique est identique à celle qui est montrée dans l’exemple ci-dessus.
Par exemple, pour ajouter une référence d’assembly dans un fichier de configuration pour configurer un écouteur de suivi, vous incluez le nom qualifié complet de l’assembly system de .NET Framework :
<add name="myListener" type="System.Diagnostics.TextWriterTraceListener, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="c:\myListener.log" />
Notes
Le runtime traite les noms d’assemblys sans tenir compte de la casse lors de la liaison à un assembly, mais il conserve la casse utilisée dans un nom d’assembly. Plusieurs outils du SDK Windows gèrent les noms d’assembly en respectant la casse. Pour de meilleurs résultats, gérez les noms d’assemblys comme s’ils tenaient compte de la casse.
Nommer les composants d’application
Le runtime ne prend pas en compte pas le nom de fichier pour déterminer l’identité d’un assembly. L’identité de l’assembly, qui est constituée du nom, de la version, de la culture et du nom fort de l’assembly, doit être claire pour le runtime.
Par exemple, si vous avez un assembly appelé myAssembly.exe qui référence un assembly appelé myAssembly.dll, la liaison se fait correctement si vous exécutez myAssembly.exe. Cependant, si une autre application exécute myAssembly.exe avec la méthode AppDomain.ExecuteAssembly, le runtime détermine que myAssembly
est déjà chargé quand myAssembly.exe demande la liaison à myAssembly
. Dans ce cas, myAssembly.dll n’est jamais chargé. Comme myAssembly.exe ne contient pas le type demandé, une exception TypeLoadException se produit.
Pour éviter ce problème, vérifiez que les assemblys qui composent votre application n’ont pas le même nom d’assembly ou que vous placez les assemblys portant le même nom dans des répertoires différents.
Notes
Dans .NET Framework, si vous placez un assembly avec nom fort dans le Global Assembly Cache, le nom de fichier de l’assembly doit correspondre au nom de l’assembly sans l’extension de nom de fichier, par exemple .exe ou .dll. Par exemple, si le nom de fichier d’un assembly est myAssembly.dll, le nom de l’assembly doit être myAssembly
. Les assemblys privés déployés uniquement dans le répertoire racine de l’application peuvent avoir un nom d’assembly différent du nom du fichier.