Gewusst wie: Erstellen von signierten Friend-Assemblys
Aktualisiert: November 2007
In diesem Beispiel wird veranschaulicht, wie Friend-Assemblys mit Assemblys verwendet werden, die über starke Namen verfügen. Beide Assemblys müssen über einen starken Namen verfügen. Obwohl in diesem Beispiel von beiden Assemblys die gleichen Schlüssel verwendet wird, können für zwei Assemblys verschiedene Schlüssel verwendet werden.
So erstellen Sie eine signierte Assembly und eine Friend-Assembly in Visual Studio
Öffnen Sie die Visual Studio-Eingabeaufforderung.
Verwenden Sie die folgenden Befehle, um mit dem Strong Name-Tool eine Schlüsseldatei zu erstellen und deren öffentlichen Schlüssel anzeigen. Weitere Informationen finden Sie unter Strong Name-Tool (Sn.exe).
Erstellen Sie für dieses Beispiel einen Schlüssel mit starkem Namen, und speichern Sie diesen in der Datei FriendAssemblies.snk:
sn -k FriendAssemblies.snk
Extrahieren Sie den öffentlichen Schlüssel aus FriendAssemblies.snk, und fügen Sie ihn in FriendAssemblies.publickey ein:
sn -p FriendAssemblies.snk FriendAssemblies.publickey
Zeigen Sie den in der Datei FriendAssemblies.publickey gespeicherten öffentlichen Schlüssel an:
sn -tp FriendAssemblies.publickey
Erstellen Sie eine neue Visual Basic-Datei mit dem Namen FriendAssembliesSnA.vb, die den folgenden Code enthält. Im Code wird das InternalsVisibleToAttribute-Attribut verwendet, um FriendAssembliesSnB als Friend-Assembly zu deklarieren.
Bei jeder Ausführung des Strong Name-Tools wird ein neuer öffentlicher Schlüssel erstellt. Daher müssen Sie den öffentlichen Schlüssel im folgenden Code durch den neu erstellten öffentlichen Schlüssel ersetzen, wie im folgenden Beispiel dargestellt.
' FriendAssembliesSnA.vb. ' Compile with: ' Vbc.exe /target:library /keyfile:FriendAssemblies.snk FriendAssembliesSnA.vb Imports System.Runtime.CompilerServices ' Replace the value of PublicKey with your public key. <Assembly: InternalsVisibleTo("FriendAssembliesSnB, PublicKey=" & _ "002400000480000094000000060200000024000052534131000400000100010065364c" & _ "640a04ab7c4f06313779601ffb5d1284b381393ad2ede92b4bf91384bbfdb0f9b7ecf6" & _ "a387b7f9348fc59366987429db41ee061c1a808eb408c4ebd9aebd0d4b19b721121a0d" & _ "c66949f12878c4e2add5489f6208f49e67ddee4d0bb72fa6860a775b7e2232209efe8b" & _ "4566ea8bd9319a4b8feb3ef4911e7a7d2e957a92")> ' Friend class. Friend Class FriendAssembliesSnA Public Sub Test() MsgBox("Friend Assemblies Sample") End Sub End Class
Kompilieren und signieren Sie FriendAssembliesSnA.vb:
Vbc.exe /target:library /keyfile:FriendAssemblies.snk FriendAssembliesSnA.vb
Erstellen Sie eine neue Visual Basic-Datei mit dem Namen FriendAssembliesSnB.vb, die den folgenden Code enthält. Da FriendAssembliesSnB von FriendAssembliesSnA als Friend-Assembly angegeben wird, kann mit dem Code in FriendAssembliesSnB auf die als Friend definierten Typen und Member von FriendAssembliesSnA zugegriffen werden.
' FriendAssembliesSnB.vb. ' Compile with: ' Vbc.exe /keyfile:FriendAssemblies.snk /r:FriendAssembliesSnA.dll FriendAssembliesSnB.vb Module FriendAssembliesSnB Public Sub Main() ' Access a Friend class. Dim friendTest As New FriendAssembliesSnA friendTest.Test() End Sub End Module
Kompilieren und signieren Sie FriendAssembliesSnB.vb:
Vbc.exe /keyfile:FriendAssemblies.snk /r:FriendAssembliesSnA.dll FriendAssembliesSnB.vb
Der Name der vom Compiler erstellten Assembly muss mit dem Namen der Friend-Assembly übereinstimmen, der an das InternalsVisibleToAttribute-Attribut übergeben wurde. Sie können die Assembly mithilfe der /out-Compileroption explizit festlegen. Weitere Informationen finden Sie unter /out (Visual Basic).
Führen Sie FriendAssembliesSnB.exe aus.
Vom Programm wird ein Meldungsfeld angezeigt, das die Zeichenfolge "Friend Assemblies Sample" enthält.
Sicherheit
Das InternalsVisibleToAttribute-Attribut ist mit der StrongNameIdentityPermission-Klasse vergleichbar. Der Hauptunterschied liegt darin, dass von StrongNameIdentityPermission Sicherheitsberechtigungen für die Ausführung einzelner Codeabschnitte angefordert werden können, während das InternalsVisibleToAttribute-Attribut die Sichtbarkeit von als Friend definierten Typen und Membern steuert.
Siehe auch
Aufgaben
Gewusst wie: Erstellen von unsignierten Friend-Assemblys
Konzepte
Friend-Assemblys (Visual Basic)