Verwenden von Visual C# zum Installieren einer Assembly im globalen Assemblycache

Dieser Artikel enthält Informationen zum Installieren einer Assembly im globalen Assemblycache in Visual C#.

Originalproduktversion: Visual C#
Ursprüngliche KB-Nummer: 815808

Zusammenfassung

In diesem Artikel wird beschrieben, wie Sie einen starken Namen für eine Assembly generieren und eine .dll Datei im globalen Assemblycache (GAC) installieren. Mit dem GAC können Sie Assemblys für viele Anwendungen freigeben. Das GAC wird automatisch mit der .NET-Laufzeit installiert. Komponenten werden in der Regel in C:\WINNT\Assembly.

Um eine Assembly im GAC zu installieren, müssen Sie der Assembly einen starken Namen geben. Der Name ist ein kryptografischer Hashschlüssel oder eine Signatur. Dieser starke Name stellt die korrekte Komponentenversionsverwaltung sicher. Dadurch wird verhindert, dass Komponenten, die denselben Namen haben, miteinander in Konflikt stehen oder von einer verbrauchenden Anwendung falsch verwendet werden.

Anforderungen

  • Administratorrechte auf dem Computer, auf dem die freigegebene Assembly installiert wird
  • Allgemeine Kenntnisse mit Assemblys in .NET.
  • Allgemeine Kenntnisse über die Verwendung von Tools an der Eingabeaufforderung.

Globaler Assemblycache

Führen Sie die folgenden Schritte aus, um ein kleines Klassenbibliotheksprojekt mit Visual Studio zu erstellen, um einen starken Namen zu generieren und die .dll Datei des Projekts im GAC zu installieren:

  1. Erstellen Sie in Visual Studio ein neues Visual C#-Klassenbibliotheksprojekt, und nennen Sie das Projekt "GACDemo".

  2. Sie müssen einen starken Namen verwenden. Um dieses Kryptografieschlüsselpaar zu generieren, verwenden Sie das Tool "Starker Name" (Sn.exe). Dieses Tool befindet sich im Unterverzeichnis, in \bin dem das .NET Framework Solution Developer Kit (SDK) installiert ist. Das Sn.exe Tool ist einfach zu bedienen. Die Befehlszeilen-Anweisung verwendet Folgendes:

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

    Notiz

    In Visual Studio können Sie die IDE-Projekteigenschaften verwenden, um ein Schlüsselpaar zu generieren und die Assembly zu signieren. Anschließend können Sie Schritt 3 und Schritt 4 überspringen und auch codeänderungen an der AssemblyInfo.cs Datei überspringen.

    Führen Sie die folgenden Schritte aus, um die IDE-Projekteigenschaften zum Generieren eines Schlüsselpaars und zum Signieren der Assembly zu verwenden:

    1. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf GACDemo, und klicken Sie dann auf "Eigenschaften".

    2. Klicken Sie auf die Registerkarte "Signieren ", und klicken Sie dann, um das Kontrollkästchen "Assembly signieren" zu aktivieren.

    3. Klicken Sie in der Liste "Schlüssel mit starkem Namen auswählen" auf <"Neu...">.

    4. Geben Sie GACkey.snk als Schlüsseldateinamen ein, deaktivieren Sie das Kontrollkästchen "Meine Schlüsseldatei mit Kennwort schützen", und klicken Sie dann auf "OK".

    5. Drücken Sie STRG+UMSCHALT+B-Tastenkombination, um das Projekt zu kompilieren.

    Nachdem Sie diese Schritte ausgeführt haben, müssen Sie schritt 5 ausführen, um Die Assembly im GAC zu installieren.

  3. Erstellen Sie ein Verzeichnis mit dem Namen GACKey , C:\ sodass Sie den Schlüssel problemlos finden und an der Eingabeaufforderung auf die Taste zugreifen können.

    Für die meisten Benutzer befinden sich die .NET-Tools in C:\Program Files\Microsoft.NET\FrameworkSDK\Bin. Bevor Sie den folgenden Befehl eingeben, sollten Sie diesen ähnlichen Pfad auf Ihrem Computer in das .NET-Bin-Verzeichnis kopieren. Geben Sie cd an der Eingabeaufforderung mit der rechten Maustaste auf, um den Pfad einzufügen, und drücken Sie dann die EINGABETASTE, um schnell in das Verzeichnis zu wechseln, in dem sich das SN-Tool befindet.

    Geben Sie folgenden Befehl ein:

    sn -k "C:\GACKey\GACkey.snk"
    
  4. Ein Schlüssel wird generiert, ist aber noch nicht der Assembly des Projekts zugeordnet. Um diese Zuordnung zu erstellen, doppelklicken Sie auf die AssemblyInfo.cs Datei in Visual Studio .NET Projektmappen-Explorer. Diese Datei enthält die Liste der Assemblyattribute, die standardmäßig enthalten sind, wenn ein Projekt in Visual Studio .NET erstellt wird. Ändern Sie das AssemblyKeyFile Assembly-Attribut im Code wie folgt:

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

    Kompilieren Sie das Projekt, indem Sie STRG+UMSCHALT+B drücken. Sie müssen keinen zusätzlichen Code zum Installieren einer .dll Datei im GAC haben.

  5. Sie können die .dll Datei mithilfe des Tools Gacutil installieren oder die .dll Datei in den entsprechenden Ordner ziehen. Wenn Sie das Tool Gacutil verwenden, können Sie einen Befehl verwenden, der wie folgt aussieht:

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

    Um die Datei zu ziehen, öffnen Sie zwei Instanzen von Windows Explorer. Suchen Sie in einer Instanz den Speicherort der .dll Dateiausgabe für Ihr Konsolenprojekt. Suchen Sie c:\<SystemRoot>\Assemblyin der anderen Instanz nach . Ziehen Sie dann die .dll Datei in den Assemblyordner.

Vollständige Codeauflistung (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("")]

Überprüfung

  1. Starten Sie den Windows-Explorer.
  2. Suchen .C:\SystemRoot\assembly
  3. GACDemo wird in der Liste der installierten .dll Dateien angezeigt.

References