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#.

Ursprüngliche Produktversion: 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. Der GAC wird automatisch mit der .NET-Runtime installiert. Komponenten werden in der Regel in C:\WINNT\Assemblygespeichert.

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 Versionsverwaltung der Komponenten sicher. Dadurch wird verhindert, dass Komponenten, die denselben Namen haben, in Konflikt stehen oder von einer nutzenden Anwendung fälschlicherweise verwendet werden.

Anforderungen

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

Globaler Assemblycache

Führen Sie die folgenden Schritte aus, um ein kleines Klassenbibliotheksprojekt mit Visual Studio zu erstellen, 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. Verwenden Sie zum Generieren dieses kryptografischen Schlüsselpaars das Strong Name-Tool (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 akzeptiert Folgendes:

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

    Hinweis

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

    Führen Sie die folgenden Schritte aus, um mithilfe der IDE-Projekteigenschaften ein Schlüsselpaar zu generieren und Ihre Assembly zu signieren:

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

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

    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 einem Kennwort schützen , und klicken Sie dann auf OK.

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

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

  3. Erstellen Sie in C:\ ein Verzeichnis mit dem Namen GACKey, damit Sie den Schlüssel problemlos finden und über die Eingabeaufforderung auf den Schlüssel 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 Verzeichnis .NET bin kopieren. Geben Sie cd an der Eingabeaufforderung ein, klicken Sie mit der rechten Maustaste, um den Pfad einzufügen, und drücken Sie dann die EINGABETASTE, um schnell zu dem Verzeichnis zu wechseln, in dem sich das SN-Tool befindet.

    Geben Sie den folgenden Befehl ein:

    sn -k "C:\GACKey\GACkey.snk"
    
  4. Es wird ein Schlüssel generiert, der aber noch nicht der Assembly des Projekts zugeordnet ist. Doppelklicken Sie zum Erstellen dieser Zuordnung auf die datei AssemblyInfo.cs 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 benötigen keinen zusätzlichen Code, um eine .dll-Datei im GAC zu installieren.

  5. Sie können die .dll-Datei installieren, indem Sie das Gacutil-Tool verwenden oder die .dll Datei in den entsprechenden Ordner ziehen. Wenn Sie das Gacutil-Tool verwenden, können Sie einen Befehl verwenden, der dem folgenden ähnelt:

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

    Um die Datei zu ziehen, öffnen Sie zwei Instanzen von Windows Explorer. Suchen Sie in einer instance den Speicherort der .dll Dateiausgabe für Ihr Konsolenprojekt. Suchen Sie c:\<SystemRoot>\Assemblyin den anderen instance 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 Windows Explorer.
  2. Suchen Sie C:\SystemRoot\assemblynach .
  3. GACDemo wird in der Liste der installierten .dll-Dateien angezeigt.

References