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

  1. Öffnen Sie die Visual Studio-Eingabeaufforderung.

  2. 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).

    1. 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

    2. Extrahieren Sie den öffentlichen Schlüssel aus FriendAssemblies.snk, und fügen Sie ihn in FriendAssemblies.publickey ein:

      sn -p FriendAssemblies.snk FriendAssemblies.publickey

    3. Zeigen Sie den in der Datei FriendAssemblies.publickey gespeicherten öffentlichen Schlüssel an:

      sn -tp FriendAssemblies.publickey

  3. 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
    
  4. Kompilieren und signieren Sie FriendAssembliesSnA.vb:

    Vbc.exe /target:library /keyfile:FriendAssemblies.snk FriendAssembliesSnA.vb

  5. 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
    
  6. 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).

  7. 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)

Referenz

InternalsVisibleToAttribute

/keyfile

Strong Name-Tool (Sn.exe)

Weitere Ressourcen

Erstellen und Verwenden von Assemblys mit starkem Namen