Condividi tramite


Procedura: creare assembly Friend firmati

Aggiornamento: novembre 2007

In questo esempio è indicato come utilizzare assembly Friend con assembly che hanno nomi sicuri. Entrambi gli assembly devono avere nomi sicuri. Sebbene entrambi gli assembly di questo esempio utilizzino le stesse chiavi, è possibile utilizzare chiavi differenti per i due assembly.

Per creare un assembly firmato e un assembly Friend in Visual Studio

  1. Aprire un prompt dei comandi di Visual Studio.

  2. Utilizzare la sequenza di comandi seguente con lo strumento Nome sicuro per generare un file di chiave e visualizzare la relativa chiave pubblica. Per ulteriori informazioni, vedere Strumento Nome sicuro (Sn.exe).

    1. Generare una chiave con nome sicuro per questo esempio e archiviarla nel file FriendAssemblies.snk:

      sn - k FriendAssemblies.snk

    2. Estrarre la chiave pubblica da FriendAssemblies.snk e inserirla in FriendAssemblies.publickey:

      sn - p FriendAssemblies.snk FriendAssemblies.publickey

    3. Visualizzare la chiave pubblica nel file FriendAssemblies.publickey:

      sn - tp FriendAssemblies.publickey

  3. Creare un nuovo file di Visual Basic denominato FriendAssembliesSnA.vb e contenente il codice seguente. Il codice utilizza l'attributo InternalsVisibleToAttribute per dichiarare FriendAssembliesSnB come assembly Friend.

    Una nuova chiave pubblica viene generata ogni volta che viene eseguito lo strumento Nome sicuro. Pertanto, è necessario sostituire la chiave pubblica nel codice seguente con la chiave pubblica appena generata, come indicato nell'esempio seguente.

    ' 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. Compilare e firmare FriendAssembliesSnA.vb:

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

  5. Creare un nuovo file di Visual Basic denominato FriendAssembliesSnB.vb e contenente il codice seguente. Poiché FriendAssembliesSnA specifica FriendAssembliesSnB come assembly Friend, il codice in FriendAssembliesSnB può accedere ai membri e ai tipi Friend da FriendAssembliesSnA.

    ' 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. Compilare e firmare FriendAssembliesSnB.vb:

    Vbc.exe /keyfile:FriendAssemblies.snk /r:FriendAssembliesSnA.dll FriendAssembliesSnB.vb

    Il nome dell'assembly generato dal compilatore deve corrispondere al nome dell'assembly Friend passato all'attributo InternalsVisibleToAttribute. È possibile impostare in modo esplicito l'assembly utilizzando l'opzione del compilatore /out. Per ulteriori informazioni, vedere /out (Visual Basic).

  7. Eseguire FriendAssembliesSnB.exe.

    Il programma visualizza una finestra di messaggio contenente la stringa " Friend Assemblies Sample".

Sicurezza

Ci sono somiglianze tra l'attributo InternalsVisibleToAttribute e la classe StrongNameIdentityPermission. La differenza principale è che StrongNameIdentityPermission può esigere autorizzazioni di sicurezza per eseguire una particolare sezione di codice, mentre l'attributo InternalsVisibleToAttribute controlla la visibilità dei membri e dei tipi Friend.

Vedere anche

Attività

Procedura: creare assembly Friend non firmati

Concetti

Assembly Friend (Visual Basic)

Riferimenti

InternalsVisibleToAttribute

/keyfile

Strumento Nome sicuro (Sn.exe)

Altre risorse

Creazione e utilizzo degli assembly con nome sicuro