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.
Un ensamblado de confianza puede acceder a los tipos y miembros internal (C#) o Friend (Visual Basic) de otro ensamblado. Si agrega un atributo de ensamblado a AssemblyA para identificar AssemblyB como ensamblado de confianza, ya no tendrá que marcar tipos y miembros en AssemblyA como públicos para que AssemblyB pueda acceder a ellos. Esto es especialmente conveniente en los escenarios siguientes:
Durante las pruebas unitarias, cuando el código de prueba se ejecuta en un ensamblado independiente, pero requiere acceso a los miembros del ensamblado que se están probando que están marcados como
internal
en C# oFriend
en Visual Basic.Cuando estás desarrollando una biblioteca de clases y las adiciones a la biblioteca se encuentran en ensamblados independientes, pero requieren acceso a los miembros de los ensamblados existentes que están marcados como
internal
en C# oFriend
en Visual Basic.
Observaciones
Puede usar el atributo InternalsVisibleToAttribute para identificar uno o más ensamblados de confianza para un ensamblado determinado. En el ejemplo siguiente se usa el atributo InternalsVisibleToAttribute de AssemblyA y se especifica AssemblyB como ensamblado amigo. Esto proporciona a AssemblyB acceso a todos los tipos y miembros del ensamblado A que están marcados como internal
en C# o Friend
en Visual Basic.
Nota:
Al compilar un ensamblado como AssemblyB que acceda a tipos internos o miembros internos de otro ensamblado como AssemblyA, 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. Para obtener más información, vea OutputAssembly (C#) o -out (Visual Basic).
using System.Runtime.CompilerServices;
using System;
[assembly: InternalsVisibleTo("AssemblyB")]
// The class is internal by default.
class FriendClass
{
public void Test()
{
Console.WriteLine("Sample Class");
}
}
// Public class that has an internal method.
public class ClassWithFriendMethod
{
internal void Test()
{
Console.WriteLine("Sample Method");
}
}
Imports System.Runtime.CompilerServices
<Assembly: InternalsVisibleTo("AssemblyB")>
' Friend class.
Friend Class FriendClass
Public Sub Test()
Console.WriteLine("Sample Class")
End Sub
End Class
' Public class with a Friend method.
Public Class ClassWithFriendMethod
Friend Sub Test()
Console.WriteLine("Sample Method")
End Sub
End Class
Solo los ensamblados que se especifiquen explícitamente como de confianza pueden acceder a tipos y miembros internal
(C#) o Friend
(Visual Basic). Por ejemplo, si AssemblyB es un amigo de Assembly A y Assembly C hace referencia a AssemblyB, Assembly C no tiene acceso a internal
los tipos (C#) o Friend
(Visual Basic) de Assembly A.
El compilador realiza una validación básica del nombre del ensamblado amigo pasado al atributo InternalsVisibleToAttribute. Si assembly A declara AssemblyB como ensamblado de confianza, las reglas de validación son las siguientes:
Si assembly A tiene un nombre seguro, AssemblyB también debe tener un nombre seguro. El nombre de ensamblado de confianza que se pasa al atributo debe estar formado por el nombre del ensamblado y la clave pública de la clave de nombre seguro que se usa para firmar el ensamblado AssemblyB.
El nombre de ensamblado de confianza que se pasa al atributo InternalsVisibleToAttribute no puede ser el nombre seguro de AssemblyB. No incluya la versión, la referencia cultural, la arquitectura o el token de clave pública del ensamblado.
Si el ensamblado Assembly A no tiene nombre seguro, el nombre de ensamblado de confianza solo debe consistir en el nombre del ensamblado. Para obtener más información, vea Cómo: Crear ensamblados de confianza sin firmar.
Si AssemblyB tiene un nombre seguro, debe especificar la clave de nombre seguro para AssemblyB mediante la configuración del proyecto o la opción del compilador de línea
/keyfile
de comandos. Para obtener más información, vea Cómo: Crear ensamblados de confianza firmados.
La StrongNameIdentityPermission clase también proporciona la capacidad de compartir tipos, con las siguientes diferencias:
StrongNameIdentityPermission se aplica a un tipo individual, mientras que un ensamblado de confianza se aplica al ensamblado completo.
Si hay cientos de tipos en assembly A que desea compartir con AssemblyB, debe agregarlos StrongNameIdentityPermission a todos ellos. Si usa un ensamblado de confianza, solo tiene que declarar una vez la relación de confianza.
Si usa StrongNameIdentityPermission, los tipos que desea compartir deben declararse como públicos. Si usa un ensamblado de amigos, los tipos compartidos se declaran como
internal
(programación C#) oFriend
(programación Visual Basic).
Para obtener información sobre cómo obtener acceso a los tipos y métodos de un ensamblado internal
(C#) o Friend
(Visual Basic) desde un archivo de módulo (un archivo con la extensión .netmodule), vea ModuleAssemblyName (C#) o -moduleassemblyname (Visual Basic).