Gewusst wie: Verwenden der vollen Signierung, um einer dynamischen Assembly einen starken Namen zu geben

Aktualisiert: November 2007

Einer dynamischen Assembly kann mithilfe einer teilweisen oder vollständigen Signierung ein starker Name zugewiesen werden. Für eine teilweise Signierung muss der öffentliche Schlüssel im AssemblyName angegeben werden, der an die DefineDynamicAssembly-Methode übergeben wird. Die Common Language Runtime reserviert den Speicherplatz innerhalb der PE (Portable Executable)-Datei für den Blob einer starken Namenssignatur, signiert die Assembly jedoch nicht. Die resultierende Assembly kann in einem Nachbearbeitungsschritt vollständig mithilfe von Tools signiert werden, die von Windows Software Development Kit (SDK) bereitgestellt werden.

Für eine vollständige Signierung muss ein öffentliches/privates Schlüsselpaar zur Verfügung gestellt werden. Diese Einheiten werden normalerweise in einer Datei, auf der Festplatte oder in einem Schlüsselcontainer gespeichert und gehören zu einem CSP (Crypto API Cryptographic Service Provider). Sicherheitsschlüssel unterer Stufe werden oft von softwarebasierten CSPs generiert und in eine Datei exportiert, sodass sie während der Projektentwicklung in Quellcode-Verwaltungssystemen überprüft werden können. Sicherheitsschlüssel hoher Stufe werden oft von der Hardware generiert, die normalerweise den Export von Sicherheitsschlüsseln aus Sicherheitsgründen verhindert. Auf solche Schlüsselpaare kann nur indirekt über einen Schlüsselcontainer zugegriffen werden. Das Schlüsselpaar mit starkem Namen wird mithilfe der System.Reflection.StrongNameKeyPair-Klasse angegeben.

Das folgende Beispiel veranschaulicht die Verwendung der vollständigen Signierung, um eine dynamischen Assembly einen starken Namen zu verleihen.

Beispiel

Dim fs As New FileStream("SomeKeyPair.snk", FileMode.Open)
Dim kp As New StrongNameKeyPair(fs)
fs.Close()
Dim an As New AssemblyName()
an.KeyPair = kp
Dim myAppDomain As AppDomain = Thread.GetDomain()
Dim ab As AssemblyBuilder = myAppDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.RunAndSave)
FileStream fs = new FileStream("SomeKeyPair.snk", FileMode.Open);
StrongNameKeyPair kp = new StrongNameKeyPair(fs);
fs.Close();
AssemblyName an = new AssemblyName();
an.KeyPair = kp;
AppDomain appDomain = Thread.GetDomain();
AssemblyBuilder ab = appDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.RunAndSave);

Siehe auch

Konzepte

Assemblys mit starkem Namen

Weitere Ressourcen

Verwenden der Reflektionsausgabe

Erstellen und Verwenden von Assemblys mit starkem Namen