Clase System.Runtime.CompilerServices.InternalsVisibleToAttribute

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 protected internal ámbito (Protected Friend ámbito en Visual Basic) solo están visibles en su propio ensamblado o en tipos que derivan de su clase contenedora. Los tipos y miembros con private protected ámbito (Private Protected ámbito en Visual Basic) están visibles en la clase contenedora o en los tipos que 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 de confianza. Esto solo se aplica a internal los miembros (Friend en Visual Basic), protected internal(Protected Friend en Visual Basic) y private protected (Private Protected en Visual Basic), pero no private a los miembros.

Nota:

En el caso de private protected los miembros (Private Protected en Visual Basic), el InternalsVisibleToAttribute atributo 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 friend que pueda tener acceso a los tipos internos y miembros del ensamblado actual. Puede definir varios ensamblados de confianza de dos maneras. 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 constructor identifica el InternalsVisibleToAttribute ensamblado friend. Tanto el ensamblado actual como el ensamblado friend deben estar sin firmar, o ambos ensamblados deben estar firmados con un nombre seguro.

Si ambos ensamblados no están firmados, el assemblyName argumento consta del nombre del ensamblado friend, especificado sin una ruta de acceso de directorio o una extensión de nombre 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 InternalsVisibleToAttribute con ensamblados con nombre seguro, consulte el InternalsVisibleToAttribute constructor .

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 seguro, se produce una MethodAccessException excepción la primera vez que el ensamblado de confianza 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:

  1. Extraiga la clave pública del archivo de clave con nombre seguro en un archivo independiente:

    Sn -p <snk_file> <outfile>

  2. Muestra la clave pública completa en la consola:

    Sn -tp <outfile>

  3. Copie y pegue el valor de clave pública completa en el código fuente.

Compilación del ensamblado de confianza 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 no ha generado aún 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#.

Compilación del ensamblado de confianza con C++

En C++, para que los miembros internos estén habilitados por el InternalsVisibleToAttribute atributo accesible para un ensamblado friend, debe usar el as_friend atributo en la directiva de C++. Para obtener más información, vea Ensamblados de confianza (C++).