softend:programmieren:assemblies_and_strong_name:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
softend:programmieren:assemblies_and_strong_name:start [2021/04/07 21:59] adminsoftend:programmieren:assemblies_and_strong_name:start [2021/04/07 22:04] (aktuell) admin
Zeile 18: Zeile 18:
 Wie erstelle ich eine Assembly mit einem starken Namen? Wie erstelle ich eine Assembly mit einem starken Namen?
 Um ein Assembly mit einem starken Namen zu erstellen, muß man zuerst ein Schlüsselpaar aus einem öffentlichen und einem privaten Schlüssel generieren. Um ein Assembly mit einem starken Namen zu erstellen, muß man zuerst ein Schlüsselpaar aus einem öffentlichen und einem privaten Schlüssel generieren.
-Dafür gibt es das Kommandozeilen-Tool sn.exe im Verzeichnis %FrameworkSDK%\bin. +Dafür gibt es das Kommandozeilen-Tool **sn.exe** im Verzeichnis **%FrameworkSDK%\bin**
-In der Eingabe aufforderung geben Sie folgenden Befehl ein:+In der Eingabeaufforderung geben Sie folgenden Befehl ein:
  
-<note>Sn -k meinKey.snk</note>+<code>Sn -k meinKey.snk</code>
  
-Es wird dabei ein Schlüsselpaar in der Datei meinKey.snk angelegt.+Es wird dabei ein Schlüsselpaar in der Datei **meinKey.snk** angelegt.
  
 Dieses Schlüsselpaar muß dann der Assembly zugewiesen, d.h. signiert werden. Dafür haben Sie zwei verschiedene Möglichkeiten. Dieses Schlüsselpaar muß dann der Assembly zugewiesen, d.h. signiert werden. Dafür haben Sie zwei verschiedene Möglichkeiten.
Zeile 29: Zeile 29:
  
 1. Signieren über Attribute unter Verwendung der Datei AssemblyInfo.vb bzw .cs: 1. Signieren über Attribute unter Verwendung der Datei AssemblyInfo.vb bzw .cs:
 +<code>
 [Visual Basic] [Visual Basic]
 <Assembly: AssemblyKeyFileAttribute("meinKey.snk")> <Assembly: AssemblyKeyFileAttribute("meinKey.snk")>
 [C#] [C#]
 [assembly: AssemblyKeyFileAttribute(@"..\..\meinKey.snk")] [assembly: AssemblyKeyFileAttribute(@"..\..\meinKey.snk")]
 +</code>
  
 Falls Sie eine IDE, z. B. Visual Studio .NET, verwenden, müssen Sie wissen, wo diese nach der Schlüsseldatei sucht. Visual Basic .NET sucht die Schlüsseldatei beispielsweise in dem Verzeichnis, in dem die Visual Studio-Projektmappe enthalten ist, wohingegen der C#-Compiler die Schlüsseldatei in dem Verzeichnis sucht, in dem die Binärdatei enthalten ist. Falls Sie eine IDE, z. B. Visual Studio .NET, verwenden, müssen Sie wissen, wo diese nach der Schlüsseldatei sucht. Visual Basic .NET sucht die Schlüsseldatei beispielsweise in dem Verzeichnis, in dem die Visual Studio-Projektmappe enthalten ist, wohingegen der C#-Compiler die Schlüsseldatei in dem Verzeichnis sucht, in dem die Binärdatei enthalten ist.
Zeile 40: Zeile 40:
 2. Signieren über die Nutzung des Kommandozeilen-Tools Assembly-Linker al.exe: 2. Signieren über die Nutzung des Kommandozeilen-Tools Assembly-Linker al.exe:
  
-al /out:meinAssembly.dll meinModul.netmodule /keyfile:meinKey.snk+<code>al /out:meinAssembly.dll meinModul.netmodule /keyfile:meinKey.snk</code>
  
 Bei beiden Möglichkeiten wird der öffentliche Schlüssel als sogenannter Token im Manifest der Assembly abgelegt. Ein Token ist ein Teilabschnitt des vollständigen öffentlichen Schlüssels und wird aus Platzgründen oft an Stelle des eigentlichen Schlüssels verwendet. Zusätzlich wird die Assembly mit dem privaten Schlüssel signiert. Diese Signatur ist wiederum Teil des Manifests. Bei beiden Möglichkeiten wird der öffentliche Schlüssel als sogenannter Token im Manifest der Assembly abgelegt. Ein Token ist ein Teilabschnitt des vollständigen öffentlichen Schlüssels und wird aus Platzgründen oft an Stelle des eigentlichen Schlüssels verwendet. Zusätzlich wird die Assembly mit dem privaten Schlüssel signiert. Diese Signatur ist wiederum Teil des Manifests.
Zeile 53: Zeile 53:
 Sollten Sie über das vollständige Schlüsselpaar verfügen und das verzögerte Signieren aus einem anderen Grund anwenden wollen, können Sie den öffentlichen Schlüssel so aus der Schlüssel-Datei herausfiltern: Sollten Sie über das vollständige Schlüsselpaar verfügen und das verzögerte Signieren aus einem anderen Grund anwenden wollen, können Sie den öffentlichen Schlüssel so aus der Schlüssel-Datei herausfiltern:
  
-Sn -p meinKey.snk meinPublicKey.snk+<code>Sn -p meinKey.snk meinPublicKey.snk</code>
  
-meinPublicKey.snk enthält nun nur den öffentlichen Schlüssel der Datei meinKey.snk. +**meinPublicKey.snk** enthält nun nur den öffentlichen Schlüssel der Datei **meinKey.snk**.
- +
-Nun fügen Sie der AssemblyInfo-Datei zwei benutzerdefinierte Attribute aus dem System.Reflection Namespace hinzu:+
  
 +Nun fügen Sie der AssemblyInfo-Datei zwei benutzerdefinierte Attribute aus dem **System.Reflection** Namespace hinzu:
 +<code>
 [Visual Basic] [Visual Basic]
 <Assembly:AssemblyKeyFileAttribute("meinPublicKey.snk")> <Assembly:AssemblyKeyFileAttribute("meinPublicKey.snk")>
Zeile 65: Zeile 65:
 [assembly:AssemblyKeyFileAttribute("meinPublicKey.snk")] [assembly:AssemblyKeyFileAttribute("meinPublicKey.snk")]
 [assembly:AssemblyDelaySignAttribute(true)] [assembly:AssemblyDelaySignAttribute(true)]
 +</code>
  
- +Dabei wird der Name der Datei mit dem öffentlichen Schlüssel angegeben und das verzögerte Signieren durch den Wert **true** aktiviert.
-Dabei wird der Name der Datei mit dem öffentlichen Schlüssel angegeben und das verzögerte Signieren durch den Wert ?trueaktiviert.+
  
 Wird das Assembly dann kompiliert, ist es zwar nur teilweise signiert, besitzt aber einen starken Namen und kann im GAC installiert und dort verwendet werden. Wird das Assembly dann kompiliert, ist es zwar nur teilweise signiert, besitzt aber einen starken Namen und kann im GAC installiert und dort verwendet werden.
 Zuvor muß allerdings noch die Überprüfung der Signatur deaktiviert werden, da die Assembly ja über keine gültige starke Namenssignatur verfügt. Diese Deaktivierung können Sie wieder mit dem Strong Name-Tool vornehmen: Zuvor muß allerdings noch die Überprüfung der Signatur deaktiviert werden, da die Assembly ja über keine gültige starke Namenssignatur verfügt. Diese Deaktivierung können Sie wieder mit dem Strong Name-Tool vornehmen:
  
-Sn -Vr meinAssembly.dll+<code>Sn -Vr meinAssembly.dll</code>
  
 Zu einem späteren Zeitpunkt, üblicherweise unmittelbar vor der Weitergabe, signieren Sie dann die Assembly mit dem kompletten Schlüsselpaar: Zu einem späteren Zeitpunkt, üblicherweise unmittelbar vor der Weitergabe, signieren Sie dann die Assembly mit dem kompletten Schlüsselpaar:
  
-Sn -R meinAssembly.dll+<code>Sn -R meinAssembly.dll</code>
  
 Danach schalten Sie die Verifizierung für die Assembly wieder ein: Danach schalten Sie die Verifizierung für die Assembly wieder ein:
  
-Sn -Vu meinAssembly.dll+<code>Sn -Vu meinAssembly.dll</code>
  
-Hinweis: Bei allen Optionen für Sn.exe wird die Groß- und Kleinschreibung beachtet. Eine vollständige Liste aller Optionen finden Sie in der .NET Framework SDK-Dokumentation unter dem Stichwort 'sn.exe'.+Hinweis: Bei allen Optionen für Sn.exe wird die Groß- und Kleinschreibung beachtet. Eine vollständige Liste aller Optionen finden Sie in der .NET Framework SDK-Dokumentation unter dem Stichwort **'sn.exe'**.
  
  • softend/programmieren/assemblies_and_strong_name/start.1617825580.txt.gz
  • Zuletzt geändert: 2021/04/07 21:59
  • von admin