Noms d'assembly
Un nom d'assembly est stocké dans des métadonnées et a un impact significatif sur la portée de l'assembly et son utilisation par une application. Un assembly avec nom fort possède un nom qualifié complet qui comprend son nom, sa culture, sa clé publique et son numéro de version. Le runtime utilise ces informations pour rechercher l'assembly et le distinguer des autres assemblys portant le même nom. Par exemple, un assembly avec nom fort appelé myTypes
peut avoir le nom qualifié complet suivant :
"myTypes, Version=1.0.1234.0, Culture="en-US", PublicKeyToken=b77a5c561934e089c
Dans cet exemple, le nom qualifié complet indique que l'assembly myTypes
possède un nom fort avec un jeton de clé publique, que sa valeur de culture est Anglais (États-Unis) et son numéro de version 1.0.1234.0.
Le code qui demande des types dans un assembly doit utiliser un nom d'assembly qualifié complet. Il s'agit d'une liaison qualifiée complète. La liaison partielle, qui ne spécifie qu'un nom d'assembly, n'est pas autorisée pour référencer les assemblys dans le .NET Framework.
Toutes les références à des assemblys constituant le .NET Framework doivent également contenir un nom qualifié complet de l'assembly. Par exemple, la référence à l'assembly .NET Framework System.Data pour la version 1.0 serait la suivante :
System.data, version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Notez que la version correspond au numéro de version de tous les assemblys .NET Framework fournis avec le .NET Framework version 1.0. Pour les assemblys .NET Framework, la valeur de culture est toujours neutre et la clé publique est la même que celle présentée dans l'exemple ci-dessus.
Par exemple, pour ajouter la référence d'un assembly à un fichier de configuration en vue de configurer un écouteur de trace, vous incluez le nom qualifié complet de l'assembly système .NET Framework :
<add name="myListener" type="System.Diagnostics.TextWriterTraceListener, system version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="c:\myListener.log" />
Remarque Lors de la liaison à un assembly, le runtime traite les noms d'assemblys comme ne respectant pas la casse, mais préserve la casse utilisée dans un nom d'assembly. Plusieurs outils du Kit de développement .NET Framework SDK gèrent les noms d'assemblys comme respectant la casse. Pour de meilleurs résultats, gérez les noms d'assemblys comme s'ils respectaient la casse.
Détermination du nom qualifié complet d'un assembly
Il existe plusieurs façons de découvrir le nom qualifié complet d'un assembly dans le cache de l'assembly global :
- Utilisez l'outil .NET Framework Configuration Tool (Mscorcfg.msc).
- Affichez le répertoire du cache de l'assembly global.
- Utilisez l'outil Global Assembly Cache Tool (Gacutil.exe).
Pour afficher les noms qualifiés complets des assemblys dans le cache de l'assembly global à l'aide de l'outil .NET Framework Configuration Tool
- Cliquez sur Démarrer, pointez sur Outils d'administration, puis cliquez sur Microsoft .NET Framework Configuration.
- Cliquez sur Cache d'assemblys, puis sur Afficher la liste des assemblys dans le cache d'assemblys.
Pour plus d'informations sur l'utilisation de l'outil Global Assembly Cache Tool pour l'affichage du nom qualifié complet des assemblys, consultez Visualisation du contenu du cache de l'assembly global.
Pour les assemblys qui ne figurent pas dans le cache de l'assembly global, vous pouvez utiliser du code pour afficher les informations sur la console ou dans une variable, ou bien vous pouvez utiliser le désassembleur MSIL Disassembler (Ildasm.exe) pour examiner les métadonnées de l'assembly qui contiennent le nom qualifié complet.
L'exemple de code suivant montre comment afficher sur la console le nom qualifié complet d'un assembly contenant une classe spécifiée.
using System;
using System.Reflection;
class asmname
{
public static void Main()
{
Type t = typeof(System.Data.DataSet);
string s = t.Assembly.FullName.ToString();
Console.WriteLine("The fully qualified assembly name containing the specified class is {0}.", s);
}
}
[Visual Basic]
Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic
' For a class not contained in mscorlib.dll, compile this code with
' the /r:<dllname> option; for example,compile the code below using:
' vbc asmname.vb /r:System.Data.dll /r:System.dll /r:System.Xml.dll
' If the class is contained in mscorlib.dll, the /r:<dllname> compiler option is unnecessary.
Class asmname
Public Shared Sub Main()
Dim t As Type = GetType(System.Data.DataSet)
Console.WriteLine("The fully qualified assembly name containing the specified class is {0}.", t.Assembly.FullName.ToString())
End Sub 'Main
End Class 'asmname
Pour plus d'informations sur la définition des attributs d'assembly tels que la version, la culture et le nom de l'assembly, consultez Définition des attributs d'assembly. Pour plus d'informations sur l'attribution d'un nom fort à un assembly, consultez Création et utilisation d'assemblys avec nom fort.
Attribution d'un nom aux composants d'application
Le runtime ne tient pas compte du nom de fichier lors de la détermination de 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 produit correctement si vous exécutez myAssembly.exe. Toutefois, si une autre application exécute myAssembly.exe à l'aide de la méthode AppDomain.ExecuteAssembly, le runtime détermine que « myAssembly » est déjà chargé lorsque myAssembly.exe demande la liaison à « myAssembly ». Dans ce cas, myAssembly.dll n'est jamais chargé. Étant donné que myAssembly.exe ne contient pas le type demandé, une exception TypeLoadException se produit.
Pour éviter ce problème, assurez-vous que les assemblys composant votre application n'ont pas le même nom d'assembly ou placez les assemblys possédant le même nom dans des répertoires différents.
Remarque Si vous placez un assembly avec nom fort dans le cache de l'assembly global, le nom de fichier de l'assembly doit correspondre au nom de l'assembly (sans l'extension du 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 différent de celui du fichier.
Voir aussi
Création d'assemblys | Assemblys avec nom fort | Cache de l'assembly global | Méthode de localisation des assemblys par le runtime | Programmation à l'aide d'assemblys