Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Eine Organisation kann über ein eng geschütztes Schlüsselpaar verfügen, auf das Entwickler nicht täglich zugreifen können. Der öffentliche Schlüssel ist häufig verfügbar, der Zugriff auf den privaten Schlüssel ist jedoch nur auf wenige Personen beschränkt. Beim Entwickeln von Assemblys mit starken Namen enthält jede Assembly, die auf die Zielassembly mit dem starken Namen verweist, das Token des öffentlichen Schlüssels, mit dem der starke Name der Zielassembly erzeugt wird. Dies erfordert, dass der öffentliche Schlüssel während des Entwicklungsprozesses verfügbar ist.
Mit dem verzögerten Signieren oder dem Teilsignieren zur Buildzeit können Sie Speicherplatz in der portierbaren ausführbaren Datei (Portable Executable, PE) für die Signatur mit starkem Namen reservieren, das eigentliche Signieren aber auf einen späteren Zeitpunkt verschieben, i.d.R. unmittelbar vor der Weitergabe der Assembly.
So verzögern Sie das Signieren einer Assembly:
Holen Sie sich den öffentlichen Schlüssel des Schlüsselpaars von der Organisation, die letztendlich signieren wird. Dieser Schlüssel befindet sich in der Regel in Form einer SNK-Datei , die mithilfe des Strong Name-Tools (Sn.exe) erstellt werden kann, das vom Windows SDK bereitgestellt wird.
Kommentieren Sie den Quellcode für die Assembly mit zwei benutzerdefinierten Attributen aus System.Reflection:
AssemblyKeyFileAttribute, der den Namen der Datei, die den öffentlichen Schlüssel enthält, als Parameter an den Konstruktor übergibt.
AssemblyDelaySignAttribute, die angibt, dass verzögertes Signieren verwendet wird, indem true als Parameter an den Konstruktor übergeben wird.
Beispiel:
[assembly:AssemblyKeyFileAttribute("myKey.snk")]; [assembly:AssemblyDelaySignAttribute(true)];[assembly:AssemblyKeyFileAttribute("myKey.snk")] [assembly:AssemblyDelaySignAttribute(true)]<Assembly:AssemblyKeyFileAttribute("myKey.snk")> <Assembly:AssemblyDelaySignAttribute(True)>Der Compiler fügt den öffentlichen Schlüssel in das Assemblymanifest ein und reserviert Platz in der PE-Datei für die vollständige starke Namenssignatur. Der tatsächliche öffentliche Schlüssel muss gespeichert werden, während die Assembly erstellt wird, damit andere Assemblys, die auf diese Assembly verweisen, den Schlüssel abrufen können, um ihn in ihrem eigenen Assembly-Verweis zu speichern.
Da die Assembly über keine gültige Signatur mit starkem Namen verfügt, muss die Überprüfung der Signatur deaktiviert werden. Dazu können Sie die Option "-Vr " mit dem Tool "Starker Name" verwenden.
Im folgenden Beispiel wird die Überprüfung für eine Assembly mit dem Namen myAssembly.dlldeaktiviert.
sn -Vr myAssembly.dllVerwenden Sie zum Deaktivieren der Überprüfung auf Plattformen, auf denen Sie das Tool "Starker Name" nicht ausführen können, z. B. Advanced RISC Machine (ARM)-Mikroprozessoren, die Option "-Vk ", um eine Registrierungsdatei zu erstellen. Importieren Sie die Registrierungsdatei in die Registrierungsdatenbank auf dem Computer, auf dem Sie die Überprüfung deaktivieren möchten. Im folgenden Beispiel wird eine Registry-Datei für
myAssembly.dllerstellt.sn -Vk myRegFile.reg myAssembly.dllMit der Option "-Vr " oder "-Vk " können Sie optional eine SNK-Datei für die Testschlüsselsignierung einschließen.
Warnung
Verlassen Sie sich nicht auf starke Namen für sicherheit. Sie stellen nur eine eindeutige Identität bereit.
Hinweis
Wenn Sie die Verzögerungssignierung während der Entwicklung mit Visual Studio auf einem 64-Bit-Computer verwenden und eine Assembly für jede CPU kompilieren, müssen Sie möglicherweise zweimal die Option "-Vr " anwenden. (In Visual Studio ist Any CPU ein Wert der Platform Target Build-Eigenschaft. Wenn Sie aus der Befehlszeile kompilieren, ist dies der Standardwert.) Um Ihre Anwendung über die Befehlszeile oder über den Datei-Explorer auszuführen, verwenden Sie die 64-Bit-Version des Sn.exe (Strong Name Tool), um die Option "-Vr " auf die Assembly anzuwenden. Um die Assembly zur Entwurfszeit in Visual Studio zu laden (z. B. wenn die Assembly Komponenten enthält, die von anderen Assemblys in Ihrer Anwendung verwendet werden), verwenden Sie die 32-Bit-Version des Strong Name Tools. Dies liegt daran, dass der Just-in-Time-Compiler die Assembly in 64-Bit-Systemcode kompiliert, wenn die Assembly über die Befehlszeile ausgeführt wird, und auf 32-Bit-Systemcode, wenn die Assembly in die Entwurfszeitumgebung geladen wird.
Zu einem späteren Zeitpunkt – in der Regel vor der Weitergabe der Assembly – übergeben Sie die Assembly an die Signaturstelle Ihrer Organisation, um sie mit der Option -R und dem Strong Name-Tool mit starkem Namen signieren zu lassen.
Im folgenden Beispiel wird eine Assembly mit dem Namen myAssembly.dll mit einem starken Namen unter Verwendung des Schlüsselpaars sgKey.snk signiert.
sn -R myAssembly.dll sgKey.snk