Share via


Comment : créer des assemblys Friend signés

Mise à jour : novembre 2007

Cet exemple indique comment utiliser des assemblys friend avec les assemblys qui ont des noms forts. Les deux types d'assemblys doivent avoir des noms forts. Bien que les deux types d'assemblys de cet exemple utilisent les mêmes clés, vous pourriez utiliser des clés différentes pour les deux types d'assemblys.

Pour créer un assembly signé et un assembly friend dans Visual Studio

  1. Ouvrez une invite de commandes Visual Studio.

  2. Utilisez la séquence de commandes suivante avec l'outil Strong Name Tool pour générer un keyfile et afficher sa clé publique. Pour plus d'informations, consultez Outil Strong Name Tool (Sn.exe).

    1. Générez une clé de nom fort pour cet exemple et stockez-la dans le fichier FriendAssemblies.snk :

      sn -k FriendAssemblies.snk

    2. Extrayez la clé publique de FriendAssemblies.snk et mettez-la dans FriendAssemblies.publickey :

      sn -p FriendAssemblies.snk FriendAssemblies.publickey

    3. Affichez la clé publique stockée dans le fichier FriendAssemblies.publickey :

      sn -tp FriendAssemblies.publickey

  3. Créez un nouveau fichier Visual Basic ; il est nommé FriendAssembliesSnA.vb et contient le code suivant. Le code utilise l'attribut InternalsVisibleToAttribute pour déclarer FriendAssembliesSnB en tant qu'assembly friend.

    L'outil Strong Name Tool génère une nouvelle clé publique chaque fois qu'il s'exécute. Par conséquent, vous devez remplacer la clé publique dans le code suivant par la clé publique que vous venez de générer, comme indiqué dans l'exemple ci-dessous.

    ' 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. Compilez et signez FriendAssembliesSnA.vb :

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

  5. Créez un nouveau fichier Visual Basic ; il est nommé FriendAssembliesSnB.vb et contient le code suivant. Dans la mesure où FriendAssembliesSnA a spécifié FriendAssembliesSnB comme assembly friend, le code dans FriendAssembliesSnB peut accéder aux membres et aux types Friend à partir de 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. Compilez et signez FriendAssembliesSnB.vb :

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

    Le nom de l'assembly généré par le compilateur doit correspondre au nom d'assembly friend passé à l'attribut InternalsVisibleToAttribute. Vous pouvez définir explicitement l'assembly en utilisant l'option du compilateur /out. Pour plus d'informations, consultez /out (Visual Basic).

  7. Exécutez FriendAssembliesSnB.exe.

    Le programme affiche un message qui contient l'équivalent de la chaîne « Exemple d'assemblys friend ».

Sécurité

Il existe des ressemblances entre l'attribut InternalsVisibleToAttribute et la classe StrongNameIdentityPermission. La différence principale est que StrongNameIdentityPermission peut demander des autorisations de sécurité pour exécuter une section particulière de code, alors que l'attribut InternalsVisibleToAttribute contrôle la visibilité des types et des membres Friend.

Voir aussi

Tâches

Comment : créer des assemblys friend non signés

Concepts

Assemblys friend (Visual Basic)

Référence

InternalsVisibleToAttribute

/keyfile

Outil Strong Name Tool (Sn.exe)

Autres ressources

Création et utilisation d'assemblys avec nom fort