Usare Visual C# per installare un assembly nella Global Assembly Cache

Questo articolo fornisce informazioni su come installare un assembly nella Global Assembly Cache in Visual C#.

Versione originale del prodotto: Oggetto visivo C#
Numero KB originale: 815808

Riepilogo

Questo articolo descrive come generare un nome sicuro per un assembly e come installare un file .dll nella Global Assembly Cache (GAC). Con la GAC è possibile condividere assembly tra molte applicazioni. La gac viene installata automaticamente con il runtime .NET. I componenti vengono in genere archiviati in C:\WINNT\Assembly.

Per installare un assembly nella GAC, è necessario assegnare all'assembly un nome sicuro. Il nome è una chiave hash di crittografia o una firma. Questo nome sicuro garantisce il corretto controllo delle versioni dei componenti. Ciò consente di evitare che i componenti con lo stesso nome siano in conflitto tra loro o non vengano usati in modo errato da un'applicazione che utilizza.

Requisiti

  • Diritti di amministratore per il computer in cui è installato l'assembly condiviso
  • Familiarità generale con gli assembly in .NET.
  • Familiarità generale con l'uso degli strumenti al prompt dei comandi.

Global Assembly Cache

Per creare un piccolo progetto libreria di classi usando Visual Studio, generare un nome sicuro e installare il file .dll del progetto nella GAC, seguire questa procedura:

  1. In Visual Studio creare un nuovo progetto libreria di classi Visual C# e assegnare al progetto il nome GACDemo.

  2. È necessario usare un nome sicuro. Per generare questa coppia di chiavi di crittografia, usare lo strumento Nome sicuro (Sn.exe). Questo strumento si trova nella \bin sottodirectory in cui è installato .NET Framework Solution Developer Kit (SDK). Lo strumento Sn.exe è facile da usare. L'istruzione della riga di comando accetta quanto segue

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

    Nota

    In Visual Studio è possibile usare le proprietà del progetto IDE per generare una coppia di chiavi e firmare l'assembly. È quindi possibile ignorare i passaggi 3 e 4 e ignorare le modifiche apportate al codice al file AssemblyInfo.cs .

    Per usare le proprietà del progetto IDE per generare una coppia di chiavi e firmare l'assembly, seguire questa procedura:

    1. In Esplora soluzioni fare clic con il pulsante destro del mouse su GACDemo e quindi scegliere Proprietà.

    2. Fare clic sulla scheda Firma e quindi selezionare la casella di controllo Firma assembly .

    3. Nell'elenco Scegliere una chiave con nome sicuro fare clic su <Nuovo.>

    4. Digitare GACkey.snk come nome del file di chiave, deselezionare la casella di controllo Proteggi il file di chiave con una password e quindi fare clic su OK.

    5. Premere CTRL+MAIUSC+B tasti di scelta rapida per compilare il progetto.

    Dopo aver seguito questi passaggi, è comunque necessario seguire il passaggio 5 per installare l'assembly nella GAC.

  3. Creare una directory denominata GACKey in in C:\ modo da poter individuare facilmente la chiave e accedere alla chiave al prompt dei comandi.

    Per la maggior parte degli utenti, gli strumenti .NET si trovano in C:\Program Files\Microsoft.NET\FrameworkSDK\Bin. Prima di digitare il comando seguente, è possibile copiare questo percorso simile nel computer nella directory bin .NET. Digitare cd al prompt dei comandi, fare clic con il pulsante destro del mouse per incollare il percorso e quindi premere INVIO per passare rapidamente alla directory in cui si trova lo strumento SN.

    Digitare il comando seguente:

    sn -k "C:\GACKey\GACkey.snk"
    
  4. Viene generata una chiave, ma non è ancora associata all'assembly del progetto. Per creare questa associazione, fare doppio clic sul file AssemblyInfo.cs in Visual Studio .NET Esplora soluzioni. Questo file contiene l'elenco degli attributi dell'assembly inclusi per impostazione predefinita quando viene creato un progetto in Visual Studio .NET. Modificare l'attributo AssemblyKeyFile assembly nel codice come indicato di seguito:

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

    Compilare il progetto premendo CTRL+MAIUSC+B. Non è necessario disporre di codice aggiuntivo per installare un file .dll nella GAC.

  5. È possibile installare il file .dll usando lo strumento Gacutil o trascinando il file .dll nella cartella appropriata. Se si usa lo strumento Gacutil, è possibile usare un comando simile al seguente:

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

    Per trascinare il file, aprire due istanze di Esplora risorse. In un'istanza trovare il percorso dell'output del file .dll per il progetto console. Nell'altra istanza trovare c:\<SystemRoot>\Assembly. Trascinare quindi il file .dll nella cartella Assembly.

Elenco di codice completo (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("")]

Verifica

  1. Avviare Esplora risorse.
  2. Individuare C:\SystemRoot\assembly.
  3. GACDemo viene visualizzato nell'elenco dei file .dll installati.

Riferimenti