Wir haben eine Reihe von COM-Komponenten in VC ++ entwickelt. Wenn ein Verweis auf eine solche Komponente einem .NET-Projekt hinzugefügt wird, generiert Visual Studio eine Interop-Assembly. Wir haben jetzt eine Reihe solcher Versammlungen.
Während wir unseren täglichen Build ausführen, signieren wir alle produzierten Binärdateien mit einer digitalen Signatur. Interop-Assemblys werden nicht signiert, da wir nicht der Meinung sind, dass wir die Autoren sind - jeder kann Visual Studio verwenden und dieselben Assemblies erstellen.
Sollen wir auch die Interop-Baugruppen signieren? Sollten wir sie auch mit einem starken Namen signieren (sn.exe-Dienstprogramm)? Was sind die Gründe dafür?
Das war eine schwierige Balance für einige Zeit. Das Problem rührt von der Tatsache her, dass Sie Ihre Interop-Assemblys mit Ihrem Code verteilen müssen. und Sie signieren möglicherweise Ihre eigenen Assemblys. Wenn Sie Ihre Baugruppe signieren, müssen alle Baugruppen, auf die sie verweist, ebenfalls signiert sein - einschließlich der Interop-Baugruppen. Also musst du sie unterschreiben.
Wenn Sie eine eigenständige Anwendung verteilen, besteht kein Risiko und Sie sollten einfach die Assemblies unterschreiben, um Ihnen das Leben zu erleichtern.
Wenn Sie Komponentenbibliotheken verteilen, kann es etwas schwieriger werden, da ein anderer Entwickler, der Ihre Bibliotheken verwendet, möglicherweise eigene Interop-Assemblies generiert, diese jedoch mit ihren eigenen Schlüsseln signiert. Dies verursacht alle Arten von Namens- und Abhängigkeitsproblemen.
Je nachdem, wie komplex Ihre Interop-Assemblys sind, können Sie den Proxy-Code in einer separaten .CS / .VB-Datei generieren und direkt in Ihre Assembly kompilieren. Dann müssen Sie sich keine Sorgen um starke Namensprobleme machen.
Wir verwenden Sn.exe, um unsere Interop-Assemblies, die von den Tools als Wrapper für COM-Objekte erzeugt werden, stark zu benennen. Wir müssen dies tun, da die Assemblys, die sie laden, signiert sind. Daher müssen sie signiert werden.
Um die Interop-Baugruppen zu erzeugen, verwenden wir:
%Vor%Offensichtlich entfernen / verzögern, wenn Sie vollständig signieren.
Wenn Sie die Assmeblies nicht erstellen möchten, könnte dies der Fall sein, aber Sie sind dafür verantwortlich. Sie möchten sicherstellen, dass sie nicht (versehentlich oder nicht) von jemand anderem ersetzt werden. Daher sollten Sie wahrscheinlich die gleiche Anzahl an Unterschriften / starken Namen anwenden, die Sie auf Ihren anderen Code anwenden.
Tags und Links .net digital-signature strongname