Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se proporcionan comentarios adicionales a la documentación de referencia de esta API.
El InternalsVisibleToAttribute atributo especifica que los tipos que normalmente son visibles solo dentro del ensamblado actual son visibles para un ensamblado especificado.
Normalmente, los tipos y miembros con internal
ámbito en C# o Friend
ámbito de Visual Basic solo están visibles en el ensamblado en el que se definen. Los tipos y miembros con ámbito protected internal
(ámbito Protected Friend
en Visual Basic) solo son visibles dentro de su propio ensamblado o en tipos que derivan de su clase contenedora. Los tipos y miembros con ámbito private protected
(ámbito Private Protected
en Visual Basic) son visibles en la clase contenedora o en los tipos que se derivan de su clase contenedora dentro del ensamblado actual.
El InternalsVisibleToAttribute atributo hace que estos tipos y miembros también sean visibles para los tipos de un ensamblado especificado, que se conoce como ensamblado amigo. Esto solo se aplica a los miembros internal
(Friend
en Visual Basic), protected internal
(Protected Friend
en Visual Basic), y private protected
(Private Protected
en Visual Basic), pero no a private
.
Nota:
En el caso de los miembros private protected
(Private Protected
en Visual Basic), el atributo InternalsVisibleToAttribute extiende la accesibilidad solo a los tipos que derivan de la clase contenedora del miembro.
El atributo se aplica en el nivel de ensamblado. Esto significa que se puede incluir al principio de un archivo de código fuente o se puede incluir en el archivo AssemblyInfo en un proyecto de Visual Studio. Puede usar el atributo para especificar un único ensamblado amiga que pueda tener acceso a los tipos y miembros internos del ensamblado actual. Puede definir varios ensamblados de confianza de dos formas. Pueden aparecer como atributos individuales de nivel de ensamblado, como se muestra en el ejemplo siguiente.
[assembly:InternalsVisibleTo("Friend1a")]
[assembly:InternalsVisibleTo("Friend1b")]
<assembly:InternalsVisibleTo("Friend1a")>
<assembly:InternalsVisibleTo("Friend1b")>
También pueden aparecer con etiquetas independientes InternalsVisibleToAttribute , pero una sola assembly
palabra clave, como se muestra en el ejemplo siguiente.
[assembly:InternalsVisibleTo("Friend2a"),
InternalsVisibleTo("Friend2b")]
<Assembly:InternalsVisibleTo("Friend2a"), _
Assembly:InternalsVisibleTo("Friend2b")>
El ensamblado de confianza lo identifica el constructor InternalsVisibleToAttribute. Tanto el ensamblado actual como el ensamblado de confianza no deben estar firmados, o bien ambos ensamblados deben estar firmados con un nombre seguro.
Si ambos ensamblados no están firmados, el assemblyName
argumento consta del nombre del ensamblado amigo, especificado sin una ruta de directorio o una extensión de archivo.
Si ambos ensamblados están firmados con un nombre seguro, el argumento para el InternalsVisibleToAttribute constructor debe constar del nombre del ensamblado sin su ruta de acceso de directorio o extensión de nombre de archivo, junto con la clave pública completa (y no su token de clave pública). Para obtener la clave pública completa de un ensamblado con nombre seguro, consulte la sección Obtención de la clave pública completa más adelante en este artículo. Para obtener más información sobre el uso de InternalsVisibleToAttribute con ensamblados con nombre seguro, consulte el constructor InternalsVisibleToAttribute.
No incluya valores para el CultureInfocampo , Versiono ProcessorArchitecture en el argumento; los compiladores de Visual Basic, C#y C++ tratan esto como un error del compilador. Si usa un compilador que no lo trata como un error (como el ensamblador de IL (ILAsm.exe)) y los ensamblados tienen un nombre firmado, se produce una MethodAccessException excepción la primera vez que el ensamblado amigo especificado accede al ensamblado que contiene el InternalsVisibleToAttribute atributo.
Para obtener más información sobre cómo usar este atributo, vea Ensamblados de confianza y ensamblados de confianza de C++.
Obtención de la clave pública completa
Puede usar la herramienta de nombre seguro (Sn.exe) para recuperar la clave pública completa de un archivo de clave con nombre seguro (.snk). Para ello, realice los pasos siguientes:
Extraiga la clave pública del archivo de clave con nombre seguro en un archivo independiente:
Sn -p <snk_file> <outfile>
Muestra la clave pública completa en la consola:
Sn -tp <outfile>
Copie y pegue el valor de clave pública completa en el código fuente.
Compila el ensamblado amigo con C#
Si usa el compilador de C# para compilar el ensamblado friend, debe especificar explícitamente el nombre del archivo de salida (.exe o .dll) mediante la opción del compilador /out . Esto es necesario porque el compilador aún no ha generado el nombre del ensamblado que está creando en el momento en que se enlaza a referencias externas. La opción del compilador /out es opcional para el compilador de Visual Basic y no se debe usar la opción del compilador -out o -o correspondiente al compilar ensamblados de confianza con el compilador de F#.
Compila la ensambladura amiga con C++
En C++, para que los miembros internos habilitados por el atributo InternalsVisibleToAttribute sean accesibles para un ensamblado amigo, debe usar el atributo as_friend
en la directiva C++. Para obtener más información, vea Ensamblados de confianza (C++).