Vorgehensweise: Signieren einer Assembly mit einem starken Namen

Hinweis

.NET Core unterstützt Assemblys mit starkem Namen, und alle Assemblys in der .NET Core-Bibliothek sind signiert. Für die meisten Assemblys von Drittanbietern sind jedoch keine starken Namen erforderlich. Weitere Informationen finden Sie unter Strong Name Signing (Signieren von Assemblys mit starkem Namen) auf GitHub.

Es gibt mehrere Möglichkeiten, eine Assembly mit einem starken Namen zu signieren:

  • Mithilfe der Seite Erstellen>Starke Namen im Projekt-Designer für ein Projekt in Visual Studio. Dies ist die einfachste und bequemste Methode, eine Assembly mit einem starken Namen zu signieren.
  • Mit dem Assemblylinker-Tool (Al.exe), um ein .NET Framework-Codemodul (eine .netmodule-Datei) mit einer Schlüsseldatei zu verknüpfen.
  • Mithilfe von Assemblyattributen, um die Informationen zum starken Namen in den Code einzufügen. Abhängig von dem Ort, an dem sich die zu verwendende Schlüsseldatei befindet, können Sie entweder das AssemblyKeyFileAttribute -Attribut oder das AssemblyKeyNameAttribute -Attribut verwenden.
  • Mithilfe von Compileroptionen.

Sie benötigen ein kryptografisches Schlüsselpaar, um eine Assembly mit einem starken Namen zu signieren. Weitere Informationen zum Erstellen eines Schlüsselpaars finden Sie unter Vorgehensweise: Erstellen eines öffentlichen/privaten Schlüsselpaars.

Erstellen und Signieren einer Assembly mit einem starken Namen mit Visual Studio

  1. Öffnen Sie im Projektmappen-Explorerdas Kontextmenü für das Projekt, und wählen Sie Eigenschaftenaus.
  2. Auf der Registerkarte Erstellen finden Sie den Knoten Starke Namen.
  3. Aktivieren Sie das Kontrollkästchen Assembly signieren, wodurch die Optionen erweitert werden.
  4. Wählen Sie die Schaltfläche Durchsuchen aus, um einen Pfad für die Schlüsseldatei mit starkem Namen auszuwählen.

Hinweis

Wählen Sie eine Datei mit öffentlichem Schlüssel aus, um die Signierung einer Assembly zu verzögern.

Visual Studio 2022: Projekteigenschaften, Abschnitt „Erstellen / Starke Namen“.

Erstellen und Signieren einer Assembly mit einem starken Name mithilfe des Assemblylinkers

Öffnen Sie die Developer-Eingabeaufforderung von Visual Studio oder die Visual Studio Developer PowerShell, und geben Sie den folgenden Befehl ein:

al /out:<assemblyName><moduleName> /keyfile:<keyfileName>

Hierbei gilt:

  • assemblyName ist der Name der stark signierten Assembly (eine DLL- oder EXE-Datei), die der Assemblylinker ausgibt.
  • moduleName ist der Name eines .NET Framework-Codemoduls (eine NETMODULE-Datei), das mindestens einen Typ enthält. Sie können eine NETMODULE-Datei erstellen, indem Sie Ihren Code mit der /target:module-Option in C# oder Visual Basic kompilieren.
  • keyfileName ist der Name des Containers oder der Datei, der bzw. die das Schlüsselpaar enthält. Der Assemblylinker interpretiert einen relativen Pfad im Zusammenhang mit dem aktuellen Verzeichnis.

Im folgenden Beispiel wird die Assembly MyAssembly.dll unter Verwendung der Schlüsseldatei sgKey.snk mit einem starken Namen signiert.

al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk

Weitere Informationen über die Verwendung dieses Tools finden Sie unter Assemblylinker.

Signieren einer Assembly mit einem starken Namen mithilfe von Attributen

  1. Fügen Sie in Ihrer Codemoduldatei das System.Reflection.AssemblyKeyFileAttribute -Attribut oder das AssemblyKeyNameAttribute -Attribut hinzu, und geben Sie den Namen der Datei oder des Containers an, die bzw. der das zum Signieren der Assembly mit einem starken Namen zu verwendende Schlüsselpaar enthält.

  2. Kompilieren Sie die Quellcodedatei normal.

    Hinweis

    Die C#- und Visual Basic-Compiler geben Compilerwarnungen aus (CS1699 bzw. BC41008), wenn das AssemblyKeyFileAttribute -Attribut oder das AssemblyKeyNameAttribute -Attribut im Quellcode auftreten. Sie können die Warnungen ignorieren.

Im folgenden Beispiel wird das AssemblyKeyFileAttribute-Attribut mit der Schlüsseldatei keyfile.snk verwendet, die sich in dem Verzeichnis befindet, in dem die Assembly kompiliert wird.

[assembly:AssemblyKeyFileAttribute("keyfile.snk")];
[assembly:AssemblyKeyFileAttribute("keyfile.snk")]
<Assembly:AssemblyKeyFileAttribute("keyfile.snk")>

Sie können auch während des Kompiliervorgangs der Quelldatei eine Assembly verzögert signieren. Weitere Informationen finden Sie unter Verzögertes Signieren einer Assembly.

Signieren einer Assembly mit einem starken Namen mithilfe des Compilers

Kompilieren Sie Ihre Quellcodedateien mit der Compileroption /keyfile oder /delaysign in C# und Visual Basic bzw. mit der Linkeroption /KEYFILE oder /DELAYSIGN in C++. Fügen Sie nach dem Optionsnamen einen Doppelpunkt und den Namen der Schlüsseldatei hinzu. Wenn Sie einen Befehlszeilencompiler verwenden, können Sie die Schlüsseldatei in das Verzeichnis kopieren, das die Quellcodedateien enthält.

Weitere Informationen zum verzögerten Signieren finden Sie unter Verzögertes Signieren einer Assembly.

Im folgenden Beispiel wird der C#-Compiler verwendet und die Assembly UtilityLibrary.dll mithilfe der Schlüsseldatei sgKey.snk mit einem starken Namen signiert.

csc /t:library UtilityLibrary.cs /keyfile:sgKey.snk

Siehe auch