Share via


Ensamblados de confianza (C# y Visual Basic)

Un ensamblado de confianza es un ensamblado que puede obtener acceso a los tipos y miembros de Friend (Visual Basic) o internal (C#) de otro ensamblado. Si identifica un ensamblado como ensamblado de confianza, ya no tiene que marcar los tipos y miembros como públicos para que otros ensamblados tengan acceso a ellos. Esto es especialmente adecuado 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 objeto de la prueba que están marcados como Friend (Visual Basic) o internal (C#).

  • Cuando se desarrolla una biblioteca de clases y las adiciones a la biblioteca están en ensamblados independientes pero requieren acceso a los miembros de ensamblados existentes que están marcados como Friend (Visual Basic) o internal (C#).

Comentarios

Puede usar el atributo InternalsVisibleToAttribute para identificar uno o más ensamblados de confianza para un ensamblado especificado. En el siguiente ejemplo, se usa el atributo InternalsVisibleToAttribute en el ensamblado A y se especifica que el ensamblado AssemblyB es de confianza. De este modo, el ensamblado AssemblyB puede obtener acceso a todos los tipos y miembros del ensamblado A que están marcados como Friend (Visual Basic) o internal (C#).

Nota

Cuando compile un ensamblado ( AssemblyB) que va a tener acceso a los tipos o miembros internos de otro ensamblado (ensamblado A), deberá 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 de enlazar a las referencias externas.Para obtener más información, vea /out (C#) y /out (Visual Basic).

Imports System.Runtime.CompilerServices
Imports System
<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
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");
    }

}

Solo los ensamblados especificados explícitamente como ensamblados de confianza pueden obtener acceso a los tipos y miembros de Friend (Visual Basic) o internal (C#). Por ejemplo, si el ensamblado B es un ensamblado de confianza del ensamblado A y el ensamblado C hace referencia al ensamblado B, C no tiene acceso a los tipos de Friend (Visual Basic) ni de internal (C#) en A.

El compilador realiza parte de la validación básica del nombre del ensamblado de confianza pasado al atributo InternalsVisibleToAttribute. Si el ensamblado A declara B como ensamblado de confianza, las reglas de validación son las siguientes:

  • Si el ensamblado A tiene un nombre seguro, el ensamblado B también debe tener un nombre seguro. El nombre del 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 utiliza para firmar el ensamblado B.

    El nombre del ensamblado de confianza que se pasa al atributo InternalsVisibleToAttribute no puede tener el nombre seguro del ensamblado B: no incluya la versión del ensamblado, la referencia cultural, la arquitectura ni el token de clave pública.

  • Si el ensamblado A no tiene un nombre seguro, el nombre del ensamblado de confianza debe estar formado sólo por el nombre del ensamblado. Para obtener más información, vea Cómo: Crear ensamblados de confianza sin firmar (C# y Visual Basic).

  • Si el ensamblado B tiene un nombre seguro, debe especificar la clave de nombre seguro del ensamblado B utilizando el valor del proyecto o la línea de comandos de la opción del compilador /keyfile. Para obtener más información, vea Cómo: Crear ensamblados de confianza firmados (C# y Visual Basic).

La clase StrongNameIdentityPermission también proporciona la capacidad de compartir tipos, con las diferencias siguientes:

  • StrongNameIdentityPermission se aplica a un tipo individual, mientras que un ensamblado de confianza se aplica a todo el ensamblado.

  • Si hay cientos de tipos en el ensamblado A que desea compartir con el ensamblado B, deberá agregar StrongNameIdentityPermission a todos ellos. Si utiliza un ensamblado de confianza, solo debe declarar una vez la relación de confianza.

  • Si usa StrongNameIdentityPermission, los tipos que desea compartir deben declararse como públicos. Si utiliza un ensamblado de confianza, los tipos compartidos se declaran como Friend (Visual Basic) o internal (C#).

Para obtener información sobre cómo obtener acceso a los tipos y métodos de Friend (Visual Basic) o internal (C#) de un archivo de módulo (archivo con la extensión .netmodule), vea /moduleassemblyname (Visual Basic) y /moduleassemblyname (C#).

Vea también

Tareas

Cómo: Crear ensamblados de confianza sin firmar (C# y Visual Basic)

Cómo: Crear ensamblados de confianza firmados (C# y Visual Basic)

Referencia

InternalsVisibleToAttribute

StrongNameIdentityPermission

Conceptos

Ensamblados y caché global de ensamblados (C# y Visual Basic)

Guía de programación de C#

Otros recursos

Guía de programación en Visual Basic