Utiliser Visual C# pour installer un assembly dans le Global Assembly Cache

Cet article fournit des informations sur l’installation d’un assembly dans le Global Assembly Cache en Visual C#.

Version d’origine du produit : Visual C#
Numéro de la base de connaissances d’origine : 815808

Résumé

Cet article explique comment générer un nom fort pour un assembly et comment installer un fichier .dll dans le Global Assembly Cache (GAC). Avec le GAC, vous pouvez partager des assemblys entre de nombreuses applications. Le GAC est automatiquement installé avec le runtime .NET. Les composants sont généralement stockés dans C:\WINNT\Assembly.

Pour installer un assembly dans le GAC, vous devez lui attribuer un nom fort. Le nom est une clé de hachage de chiffrement ou une signature. Ce nom fort garantit un contrôle de version correct des composants. Cela permet d’empêcher les composants portant le même nom d’entrer en conflit les uns avec les autres ou d’être utilisés de manière incorrecte par une application consommatrice.

Configuration requise

  • Droits d’administrateur sur l’ordinateur sur lequel l’assembly partagé est installé
  • Connaissance générale des assemblys dans .NET.
  • Connaissance générale de l’utilisation des outils à l’invite de commandes.

Global Assembly Cache

Pour créer un petit projet de bibliothèque de classes à l’aide de Visual Studio, générer un nom fort et installer le fichier .dll du projet dans le GAC, procédez comme suit :

  1. Dans Visual Studio, créez un projet bibliothèque de classes Visual C# et nommez le projet GACDemo.

  2. Vous devez utiliser un nom fort. Pour générer cette paire de clés de chiffrement, utilisez l’outil Nom fort (Sn.exe). Cet outil se trouve dans le \bin sous-répertoire où le Kit de développement de solutions (SDK) .NET Framework est installé. L’outil Sn.exe est facile à utiliser. L’instruction de ligne de commande prend les éléments suivants :

    sn -k "[DriveLetter]:\[DirectoryToPlaceKey]\[KeyName].snk"
    

    Remarque

    Dans Visual Studio, vous pouvez utiliser les propriétés du projet IDE pour générer une paire de clés et signer votre assembly. Ensuite, vous pouvez ignorer les étapes 3 et 4, ainsi que les modifications apportées au code dans le fichier AssemblyInfo.cs .

    Pour utiliser les propriétés du projet IDE afin de générer une paire de clés et de signer votre assembly, procédez comme suit :

    1. Dans Explorateur de solutions, cliquez avec le bouton droit sur GACDemo, puis cliquez sur Propriétés.

    2. Cliquez sur l’onglet Signature, puis sélectionnez la zone Signer l’assembly case activée.

    3. Dans la liste Choisir une clé de nom fort, cliquez sur <Nouveau.>

    4. Tapez GACkey.snk comme nom de fichier de clé, désactivez la zone Protéger mon fichier de clé avec un mot de passe case activée, puis cliquez sur OK.

    5. Appuyez sur Ctrl+Maj+B raccourci clavier pour compiler le projet.

    Après avoir suivi ces étapes, vous devez toujours suivre l’étape 5 pour installer votre assembly dans le GAC.

  3. Créez un répertoire nommé GACKey dans C:\ afin de pouvoir facilement localiser la clé et accéder à la clé à l’invite de commandes.

    Pour la plupart des utilisateurs, les outils .NET se trouvent dans C:\Program Files\Microsoft.NET\FrameworkSDK\Bin. Avant de taper la commande suivante, vous pouvez copier ce chemin d’accès similaire sur votre ordinateur dans le répertoire bin .NET. Tapez cd à l’invite de commandes, cliquez avec le bouton droit pour coller le chemin, puis appuyez sur Entrée pour accéder rapidement au répertoire où se trouve l’outil SN.

    Tapez la commande suivante :

    sn -k "C:\GACKey\GACkey.snk"
    
  4. Une clé est générée, mais elle n’est pas encore associée à l’assembly du projet. Pour créer cette association, double-cliquez sur le fichier AssemblyInfo.cs dans Visual Studio .NET Explorateur de solutions. Ce fichier contient la liste des attributs d’assembly inclus par défaut lorsqu’un projet est créé dans Visual Studio .NET. Modifiez l’attribut AssemblyKeyFile d’assembly dans le code comme suit :

    [assembly: AssemblyKeyFile('C:\\GACKey\\GACKey.snk') ]
    

    Compilez le projet en appuyant sur Ctrl+Maj+B. Vous n’avez pas besoin de code supplémentaire pour installer un fichier .dll dans le GAC.

  5. Vous pouvez installer le fichier .dll à l’aide de l’outil Gacutil ou en faisant glisser le fichier .dll vers le dossier approprié. Si vous utilisez l’outil Gacutil, vous pouvez utiliser une commande qui ressemble à ce qui suit :

    gacutil -I "[DriveLetter]:\[PathToBinDirectoryInVSProject]\gac.dll"
    

    Pour faire glisser le fichier, ouvrez deux instances de Windows Explorer. Dans un instance, recherchez l’emplacement de la sortie du fichier .dll pour votre projet de console. Dans l’autre instance, recherchez c:\<SystemRoot>\Assembly. Ensuite, faites glisser votre fichier .dll vers le dossier Assembly.

Liste de code complète (AssemblyInfo.cs)

using System.Reflection;
using System.Runtime.CompilerServices;

// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// that is associated with an assembly.
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Version information for an assembly is made up of the following four values:
// Major Version
// Minor Version
// Build Number
// Revision
// You can specify all the values, or you can default the revision and build numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.*")]
// To sign your assembly you must specify a key to use. See the
// Microsoft .NET Framework documentation for more information about assembly signing.
// Use the following attributes to control that key is used for signing.
// Notes:
//     (*) If no key is specified, the assembly is not signed.
//     (*) KeyName refers to a key that has been installed in the Crypto Service
//         Provider (CSP) on your computer. KeyFile refers to a file that contains
//         a key.
//     (*) If the KeyFile and the KeyName values are both specified, the
//         following processing occurs:
//         (1) If the KeyName can be found in the CSP, that key is used.
//         (2) If the KeyName does not exist and the KeyFile does exist, the key
//             in the KeyFile is installed to the CSP and used.
//     (*) To create a KeyFile, you can use the sn.exe (Strong Name) utility.
//         When specifying the KeyFile, the location of the KeyFile must be
//         relative to the project output directory which is
//         %Project Directory%\obj\<configuration>. For example, if your KeyFile is
//         located in the project directory, you would specify the AssemblyKeyFile
//         attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
//     (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
//         documentation for more information about this.
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("C:\\GACKey\\GACKey.snk")]
[assembly: AssemblyKeyName("")]

Vérification

  1. Démarrez l’Explorateur Windows.
  2. Recherchez C:\SystemRoot\assembly.
  3. GacDemo apparaît dans la liste des fichiers .dll installés.

References