Classe System.Runtime.CompilerServices.InternalsVisibleToAttribute
Cet article vous offre des remarques complémentaires à la documentation de référence pour cette API.
L’attribut InternalsVisibleToAttribute spécifie que les types qui sont généralement visibles uniquement dans l’assembly actuel sont visibles par un assembly spécifié.
En règle générale, les types et les membres dont internal
l’étendue est en C# ou Friend
dans Visual Basic sont visibles uniquement dans l’assembly dans lequel ils sont définis. Les types et les membres avec protected internal
étendue (Protected Friend
étendue en Visual Basic) sont visibles uniquement dans leur propre assembly ou aux types qui dérivent de leur classe conteneur. Les types et les membres avec private protected
étendue (Private Protected
étendue en Visual Basic) sont visibles dans la classe conteneur ou dans les types qui dérivent de leur classe conteneur dans l’assembly actuel
L’attribut InternalsVisibleToAttribute rend ces types et ces membres également visibles par les types d’un assembly spécifié, appelé assembly friend. Cela s’applique uniquement aux internal
membres (Friend
en Visual Basic), protected internal
(Protected Friend
en Visual Basic) et private protected
(Private Protected
en Visual Basic), mais pas private
aux membres.
Remarque
Dans le cas des private protected
membres (Private Protected
en Visual Basic), l’attribut InternalsVisibleToAttribute étend l’accessibilité uniquement aux types qui dérivent de la classe conteneur du membre.
L’attribut est appliqué au niveau de l’assembly. Cela signifie qu’il peut être inclus au début d’un fichier de code source, ou qu’il peut être inclus dans le fichier AssemblyInfo dans un projet Visual Studio. Vous pouvez utiliser l’attribut pour spécifier un assembly friend unique qui peut accéder aux types internes et aux membres de l’assembly actuel. Vous pouvez définir plusieurs assemblys friend de deux façons. Ils peuvent apparaître en tant qu’attributs individuels au niveau de l’assembly, comme l’illustre l’exemple suivant.
[assembly:InternalsVisibleTo("Friend1a")]
[assembly:InternalsVisibleTo("Friend1b")]
<assembly:InternalsVisibleTo("Friend1a")>
<assembly:InternalsVisibleTo("Friend1b")>
Ils peuvent également apparaître avec des balises distinctesInternalsVisibleToAttribute, mais une seule assembly
mot clé, comme l’illustre l’exemple suivant.
[assembly:InternalsVisibleTo("Friend2a"),
InternalsVisibleTo("Friend2b")]
<Assembly:InternalsVisibleTo("Friend2a"), _
Assembly:InternalsVisibleTo("Friend2b")>
L’assembly friend est identifié par le InternalsVisibleToAttribute constructeur. L’assembly actuel et l’assembly friend doivent être non signés, ou les deux assemblys doivent être signés avec un nom fort.
Si les deux assemblys ne sont pas signés, l’argument assemblyName
se compose du nom de l’assembly friend, spécifié sans chemin d’accès au répertoire ou extension de nom de fichier.
Si les deux assemblys sont signés avec un nom fort, l’argument du InternalsVisibleToAttribute constructeur doit se composer du nom de l’assembly sans son chemin d’accès au répertoire ou l’extension de nom de fichier, ainsi que la clé publique complète (et non son jeton de clé publique). Pour obtenir la clé publique complète d’un assembly avec nom fort, consultez la section Obtenir la clé publique complète plus loin dans cet article. Pour plus d’informations sur l’utilisation InternalsVisibleToAttribute avec des assemblys nommés fort, consultez le InternalsVisibleToAttribute constructeur.
N’incluez pas de valeurs pour le CultureInfo, Versionou ProcessorArchitecture le champ dans l’argument ; les compilateurs Visual Basic, C# et C++ traitent cela comme une erreur du compilateur. Si vous utilisez un compilateur qui ne le traite pas comme une erreur (par exemple, l’assembleur IL (ILAsm.exe)) et que les assemblys sont nommés fort, une MethodAccessException exception est levée la première fois que l’assembly friend spécifié accède à l’assembly qui contient l’attribut InternalsVisibleToAttribute .
Pour plus d’informations sur l’utilisation de cet attribut, consultez assemblys Friend et assemblys friend C++.
Obtenir la clé publique complète
Vous pouvez utiliser l’outil Strong Name (Sn.exe) pour récupérer la clé publique complète à partir d’un fichier de clé nommée forte (.snk). Pour ce faire, vous effectuez les étapes suivantes :
Extrayez la clé publique du fichier de clé nommée fort dans un fichier distinct :
Sn -p <snk_file> <outfile>
Affichez la clé publique complète dans la console :
Sn -tp <outfile>
Copiez et collez la valeur de clé publique complète dans votre code source.
Compiler l’assembly friend avec C#
Si vous utilisez le compilateur C# pour compiler l’assembly friend, vous devez spécifier explicitement le nom du fichier de sortie (.exe ou .dll) à l’aide de l’option /out du compilateur. Ceci est nécessaire, car le compilateur n’a pas encore généré le nom de l’assembly qu’il est en train de créer au moment où il effectue une liaison avec les références externes. L’option du compilateur /out est facultative pour le compilateur Visual Basic, et l’option de compilateur -out ou -o correspondante ne doit pas être utilisée lors de la compilation d’assemblys ami avec le compilateur F#.
Compiler l’assembly friend avec C++
En C++, pour rendre les membres internes activés par l’attribut InternalsVisibleToAttribute à un assembly friend, vous devez utiliser l’attribut as_friend
dans la directive C++. Pour plus d’informations, consultez Assemblys friend (C++).