Partager via


Assemblys friend (Visual Basic)

Mise à jour : novembre 2007

Un assembly friend est un assembly autorisé à accéder Friend à des types et à des membres d'un assembly différent. (Pour plus d'informations, consultez Friend (Visual Basic)). Si vous identifiez un assembly en tant qu'assembly friend, les types et les membres n'ont pas besoin d'être publics pour accéder à d'autres assemblys. Cette solution est particulièrement pratique dans les cas suivants :

  • Lors du test unitaire, lorsque le code de test s'exécute dans un assembly séparé mais requiert l'accès aux membres dans l'assembly en cours de test, marqués en tant que Friend.

  • Lorsque vous développez une bibliothèque de classes et lorsque les ajouts à cette bibliothèque se trouvent dans des assemblys mais nécessitent l'accès aux membres des assemblys existants marqués en tant que Friend.

Notes

Vous pouvez utiliser l'attribut InternalsVisibleToAttribute pour identifier un ou plusieurs assemblys friend pour un assembly donné. Si, par exemple, vous incluez l'attribut InternalsVisibleToAttribute dans l'assembly A et spécifiez l'assembly B en tant qu'assembly friend, l'assembly B a accès à tous les types et membres de l'assembly A, marqués de la mention Friend, comme illustré dans l'exemple suivant.

Imports System.Runtime.CompilerServices

<Assembly: InternalsVisibleTo("FriendAssembliesB")> 

' Friend class.
Friend Class FriendAssembliesA
    Public Sub Test()
        MsgBox("Friend Assemblies Sample Class")
    End Sub
End Class

' Public class with a Friend method.
Public Class FriendAssembliesClassA
    Friend Sub Test()
        MsgBox("Friend Assemblies Sample Method")
    End Sub
End Class

Seuls les assemblys que vous marquez explicitement de la mention Friend peuvent accéder aux types et membres Friend. Si, par exemple, l'assembly B est une fonction friend de l'assembly A et l'assembly C référence l'assembly B, C n'a pas accès aux types Friend dans A.

Le compilateur effectue une validation de base du nom de l'assembly friend soumis à l'attribut InternalsVisibleToAttribute. Si l'assembly A déclare B comme assembly friend, les règles de validation sont les suivantes :

  • Si l'assembly A porte un nom fort, l'assembly B doit également porter un nom fort. Le nom de l'assembly friend soumis à l'attribut doit se composer du nom de l'assembly et de la clé publique du nom fort utilisée pour la signature de l'assembly B.

    Le nom de l'assembly friend soumis à l'attribut InternalsVisibleToAttribute ne peut pas être le nom fort de l'assembly B : n'incluez ni la version de l'assembly, ni la culture, ni l'architecture, ni le jeton de clé publique.

  • Si l'assembly A ne porte pas de nom fort, le nom de l'assembly friend doit n'être constitué que du nom de l'assembly. Pour plus d'informations, consultez Comment : créer des assemblys friend non signés.

  • Si l'assembly B porte un nom fort, spécifiez la clé du nom fort de l'assembly B, en utilisant le paramètre du projet ou le compilateur de ligne de commande /keyfile. Pour plus d'informations, consultez Comment : créer des assemblys Friend signés.

Pour plus d'informations sur l'accès aux types et méthodes Friend d'un assembly à partir d'un fichier de module (fichier à extension .netmodule), consultez /moduleassemblyname.

Note de 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

Comment : créer des assemblys Friend signés

Concepts

Assemblys

Référence

InternalsVisibleToAttribute

Assembly Linker (Al.exe)

/addmodule

Autres ressources

Compilateur Visual Basic