Visual C# gebruiken om een assembly te installeren in de Global Assembly Cache

Dit artikel bevat informatie over het installeren van een assembly in de Global Assembly Cache in Visual C#.

Oorspronkelijke productversie: Visual C#
Origineel KB-nummer: 815808

Samenvatting

In dit artikel wordt beschreven hoe u een sterke naam voor een assembly genereert en hoe u een .dll-bestand installeert in de Global Assembly Cache (GAC). Met de GAC kunt u assembly's delen in veel toepassingen. De GAC wordt automatisch geïnstalleerd met de .NET-runtime. Onderdelen worden doorgaans opgeslagen in C:\WINNT\Assembly.

Als u een assembly in de GAC wilt installeren, moet u de assembly een sterke naam geven. De naam is een cryptografische hash-sleutel of handtekening. Deze sterke naam zorgt voor de juiste versiebeheer van onderdelen. Dit helpt voorkomen dat onderdelen met dezelfde naam met elkaar conflicteren of onjuist worden gebruikt door een verbruikende toepassing.

Vereisten

  • Beheerdersrechten voor de computer waarop de gedeelde assembly wordt geïnstalleerd
  • Algemene bekendheid met assembly's in .NET.
  • Algemene bekendheid met het gebruik van hulpprogramma's bij de opdrachtprompt.

Global Assembly Cache

Voer de volgende stappen uit om een klein class library-project te maken met behulp van Visual Studio, om een sterke naam te genereren en om het .dll-bestand van het project in de GAC te installeren:

  1. Maak in Visual Studio een nieuw Visual C#-klassebibliotheekproject en noem het project GACDemo.

  2. U moet een sterke naam gebruiken. Gebruik het hulpprogramma Sterke naam (Sn.exe) om dit cryptografische sleutelpaar te genereren. Dit hulpprogramma bevindt zich in de \bin submap waar de .NET Framework Solution Developer Kit (SDK) is geïnstalleerd. De Sn.exe tool is eenvoudig te gebruiken. Voor de opdrachtregelinstructie wordt het volgende gebruikt

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

    Opmerking

    In Visual Studio kunt u de eigenschappen van het IDE-project gebruiken om een sleutelpaar te genereren en uw assembly te ondertekenen. Vervolgens kunt u stap 3 en stap 4 overslaan en ook eventuele codewijzigingen in het AssemblyInfo.cs-bestand overslaan.

    Als u de eigenschappen van het IDE-project wilt gebruiken om een sleutelpaar te genereren en uw assembly te ondertekenen, voert u de volgende stappen uit:

    1. Klik in Solution Explorer met de rechtermuisknop op GACDemo en klik vervolgens op Eigenschappen.

    2. Klik op het tabblad Ondertekenen en klik vervolgens om het selectievakje De assembly ondertekenen in te schakelen.

    3. Klik in de lijst Kies een sterke naamsleutel op <Nieuw...>.

    4. Typ GACkey.snk als de sleutelbestandsnaam, schakel het selectievakje Mijn sleutelbestand beveiligen met een wachtwoord uit en klik vervolgens op OK.

    5. Druk op Ctrl+Shift+B om het project te compileren.

    Nadat u deze stappen hebt uitgevoerd, moet u nog steeds stap 5 volgen om uw assembly in de GAC te installeren.

  3. Maak een map met de naam GACKey in C:\ , zodat u de sleutel eenvoudig kunt vinden en de sleutel kunt openen via de opdrachtprompt.

    Voor de meeste gebruikers bevinden de .NET-hulpprogramma's zich in C:\Program Files\Microsoft.NET\FrameworkSDK\Bin. Voordat u de volgende opdracht typt, kunt u dit vergelijkbare pad op uw computer kopiëren naar de .NET bin-map. Typ cd bij de opdrachtprompt, klik met de rechtermuisknop om het pad te plakken en druk vervolgens op Enter om snel naar de map te gaan waarin het SN-hulpprogramma zich bevindt.

    Typ de volgende opdracht:

    sn -k "C:\GACKey\GACkey.snk"
    
  4. Er wordt een sleutel gegenereerd, maar deze is nog niet gekoppeld aan de assembly van het project. Als u deze koppeling wilt maken, dubbelklikt u op het AssemblyInfo.cs-bestand in Visual Studio .NET Solution Explorer. Dit bestand bevat de lijst met assembly-kenmerken die standaard worden opgenomen wanneer een project wordt gemaakt in Visual Studio .NET. Wijzig het AssemblyKeyFile assembly-kenmerk in de code als volgt:

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

    Compileer het project door op Ctrl+Shift+B te drukken. U hoeft geen extra code te hebben om een .dll-bestand in de GAC te installeren.

  5. U kunt het .dll-bestand installeren met behulp van het hulpprogramma Gacutil of door het .dll-bestand naar de juiste map te slepen. Als u het hulpprogramma Gacutil gebruikt, kunt u een opdracht gebruiken die er ongeveer als volgt uitziet:

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

    Als u het bestand wilt slepen, opent u twee exemplaren van Windows Verkenner. Zoek in één instantie de locatie van de uitvoer van het .dll-bestand voor uw consoleproject. Zoek in c:\<SystemRoot>\Assemblyhet andere exemplaar naar . Sleep vervolgens het .dll-bestand naar de map Assembly.

Volledige codevermelding (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("")]

Verificatie

  1. Start Windows Verkenner.
  2. Zoek C:\SystemRoot\assembly.
  3. U ziet GACDemo in de lijst met geïnstalleerde .dll bestanden.

Verwijzingen