Verwalten der Signierung von Assemblys und Manifesten
Durch eine Signierung mit starkem Namen erhalten Softwarekomponenten eine global eindeutige Identität. Starke Namen werden verwendet, um sicherzustellen, dass die Assembly nicht von einem anderen Entwickler manipuliert werden kann und dass Komponentenabhängigkeiten und Konfigurationsanweisungen der richtigen Komponente und Komponentenversion zugeordnet werden.
Ein starker Name setzt sich aus der Identität der Assembly – dem einfachen Textnamen, der Versionsnummer und Kulturinformationen – sowie einem öffentlichen Schlüsseltoken und einer digitalen Signatur zusammen.
Informationen zum Signieren von Assemblys in Visual Basic- und C#-Projekten finden Sie unter Erstellen und Verwenden von Assemblys mit starkem Namen.
Informationen zum Signieren von Assemblys in C++-Projekten finden Sie unter Assemblys mit starken Namen (C++/CLI).
Hinweis
Die Signierung mit starken Namen schützt nicht gegen Reverse Engineering (Zurückentwicklung) der Assembly. Informationen zum Schutz gegen Reverse Engineering finden Sie unter Dotfuscator Community Edition.
Objekttypen und Signierung
Sie können folgende .NET-Assemblys und Anwendungsmanifeste signieren:
Ausführbare Dateien (.exe)
Anwendungsmanifeste (.exe.manifest)
Bereitstellungsmanifeste (.application)
Freigegebene Komponentenassemblys (.dll)
Signieren Sie folgende Objekttypen:
Assemblys, wenn diese im globalen Assemblycache (GAC) bereitgestellt werden sollen.
ClickOnce-Anwendungen und Bereitstellungsmanifeste. Visual Studio aktiviert die Signierung für diese Anwendungen standardmäßig.
Primäre Interop-Assemblys, die für die COM-Interoperabilität verwendet werden. Durch das TLBIMP-Dienstprogramm werden primäre Interop-Assemblys mit einem starken Namen erzwungen, wenn diese aus einer COM-Typbibliothek erstellt werden.
Im Allgemeinen sollten Sie ausführbare Dateien nicht signieren. Eine Komponente mit starkem Namen kann nicht auf eine Komponente ohne starken Namen verweisen, die mit der Anwendung bereitgestellt wird. Visual Studio signiert nicht ausführbare Dateien der Anwendung, signiert jedoch stattdessen das Anwendungsmanifest, das auf die ausführbare Datei mit schwachem Namen zeigt. Vermeiden Sie das Signieren von Komponenten, die für Ihre Anwendung privat sind, da das Signieren das Verwalten von Abhängigkeiten erschweren kann.
Signieren einer Assembly in Visual Studio
Das Verfahren zum Signieren einer Assembly hängt davon ab, welche Version des Projekt-Designers im Projekt zum Einsatz kommt.
Für C#-Projekte von .NET Core (sowie .NET 5 und höher) in Visual Studio 2022:
- Öffnen Sie das Fenster „Projekteigenschaften“. Klicken Sie hierzu im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten, und wählen Sie Eigenschaften aus.
- Suchen Sie unter Build nach Starke Namen, und aktivieren Sie das Kontrollkästchen Assembly signieren. Beim Aktivieren des Kontrollkästchens werden weitere Optionen für die Schlüsseldatei und die verzögerte Signierung angezeigt.
- Geben Sie eine Schlüsseldatei an.
Wenn Sie nicht über eine Schlüsseldatei verfügen, können Sie die Befehlszeile verwenden, um eine .snk
-Datei zu erstellen. Sie können auch ein Zertifikat in einer .pfx
-Datei mithilfe des Veröffentlichungsprozesses verwenden oder generieren, und im Schritt Manifeste signieren können Sie ein Testzertifikat erstellen, das nur während der Entwicklung und Tests verwendet werden soll, oder Sie können für die Produktion ein von Ihrer IT-Abteilung oder von einer autorisierten Quelle ausgestelltes Zertifikat verwenden. Siehe Bereitstellen einer .NET-Windows-Desktop-App mit ClickOnce.
Für .NET Framework- und Visual Basic-Projekte in Visual Studio 2022 oder Visual Studio 2019:
- Öffnen Sie im Fenster „Projekteigenschaften“ die Registerkarte Signieren. Klicken Sie hierzu im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten, und wählen Sie Eigenschaften aus. Wählen Sie die Registerkarte Signieren aus.
- Aktivieren Sie das Kontrollkästchen Assembly signieren.
- Geben Sie eine Schlüsseldatei an. Wenn Sie eine neue Schlüsseldatei erstellen, werden neue Schlüsseldateien immer im PFX-Format erstellt. Sie benötigen einen Namen und ein Kennwort für die neue Datei.
Warnung
Sie sollten die Schlüsseldatei immer mit einem Kennwort schützen, damit sie von keiner anderen Person verwendet werden kann. Sie können die Schlüsseldateien auch schützen, indem Sie Schlüsselanbieter oder Zertifikatspeicher verwenden.
Außerdem können Sie auf eine Schlüsseldatei, die Sie bereits erstellt haben, zeigen. Weitere Informationen zum Erstellen eines Schlüssels finden Sie unter Create a Public-Private Key (Erstellen eines Paars aus öffentlichem und privatem Schlüssel).
Wenn Sie nur Zugriff auf einen öffentlichen Schlüssel haben, können Sie verzögertes Signieren verwenden, um das Zuweisen des Schlüssels zu verzögern. Sie können auch das verzögerte Signieren aktivieren, indem Sie das Kontrollkästchen Nur verzögerte Signierung aktivieren. Ein verzögert signiertes Projekt wird nicht ausgeführt, und Sie können es nicht debuggen. Allerdings können Sie die Überprüfung während der Entwicklung überspringen, indem Sie das Strong Name-Tool Sn.exe mit der Option -Vr
verwenden.
Weitere Informationen zum Signieren von Manifesten finden Sie unter Vorgehensweise: Signieren von Anwendungs- und Bereitstellungsmanifesten.