Procedimiento para crear ensamblados de confianza firmados
Artículo
En este ejemplo se muestra cómo usar ensamblados de confianza con ensamblados que tienen nombres seguros. Ambos ensamblados deben tener nombres seguros. Aunque los dos ensamblados de este ejemplo usan las mismas claves, es posible usar claves diferentes para dos ensamblados.
Creación de un ensamblado firmado y un ensamblado de confianza
Abra un símbolo del sistema.
Use la siguiente secuencia de comandos con la herramienta de nombre seguro para generar un archivo de claves y mostrar su clave pública. Para obtener más información, vea Sn.exe (herramienta de nombre seguro).
Genere una clave de nombre seguro para este ejemplo y almacénela en el archivo FriendAssemblies.snk:
sn -k FriendAssemblies.snk
Extraiga la clave pública de FriendAssemblies.snk y colóquela en FriendAssemblies.publickey:
sn -p FriendAssemblies.snk FriendAssemblies.publickey
Muestre la clave pública almacenada en el archivo FriendAssemblies.publickey:
sn -tp FriendAssemblies.publickey
Cree un archivo de C# o de Visual Basic denominado friend_signed_A que contenga el código siguiente. El código usa el atributo InternalsVisibleToAttribute para declarar friend_signed_B como un ensamblado de confianza.
La herramienta de nombre seguro genera una nueva clave pública cada vez que se ejecuta. Por tanto, debe reemplazar la clave pública en el código siguiente con la clave pública que acaba de generar, como se muestra en el ejemplo siguiente.
// friend_signed_A.cs
// Compile with:
// csc /target:library /keyfile:FriendAssemblies.snk friend_signed_A.cs
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("friend_signed_B, PublicKey=0024000004800000940000000602000000240000525341310004000001000100e3aedce99b7e10823920206f8e46cd5558b4ec7345bd1a5b201ffe71660625dcb8f9a08687d881c8f65a0dcf042f81475d2e88f3e3e273c8311ee40f952db306c02fbfc5d8bc6ee1e924e6ec8fe8c01932e0648a0d3e5695134af3bb7fab370d3012d083fa6b83179dd3d031053f72fc1f7da8459140b0af5afc4d2804deccb6")]
class Class1
{
public void Test()
{
System.Console.WriteLine("Class1.Test");
System.Console.ReadLine();
}
}
' friend_signed_A.vb
' Compile with:
' Vbc -target:library -keyfile:FriendAssemblies.snk friend_signed_A.vb
Imports System.Runtime.CompilerServices
<Assembly: InternalsVisibleTo("friend_signed_B, PublicKey=0024000004800000940000000602000000240000525341310004000001000100e3aedce99b7e10823920206f8e46cd5558b4ec7345bd1a5b201ffe71660625dcb8f9a08687d881c8f65a0dcf042f81475d2e88f3e3e273c8311ee40f952db306c02fbfc5d8bc6ee1e924e6ec8fe8c01932e0648a0d3e5695134af3bb7fab370d3012d083fa6b83179dd3d031053f72fc1f7da8459140b0af5afc4d2804deccb6")>
Public Class Class1
Public Sub Test()
System.Console.WriteLine("Class1.Test")
System.Console.ReadLine()
End Sub
End Class
Compile y firme friend_signed_A mediante el siguiente comando.
Cree un archivo de C# o de Visual Basic denominado friend_signed_B que contenga el código siguiente. Dado que friend_signed_A especifica que friend_signed_B es un ensamblado de confianza, el código de friend_signed_B puede tener acceso a tipos y miembros de C# (internal) o Visual Basic (Friend) desde friend_signed_A. El archivo contiene el código siguiente.
// friend_signed_B.cs
// Compile with:
// csc /keyfile:FriendAssemblies.snk /r:friend_signed_A.dll /out:friend_signed_B.exe friend_signed_B.cs
public class Program
{
static void Main()
{
Class1 inst = new Class1();
inst.Test();
}
}
' friend_signed_B.vb
' Compile with:
' Vbc -keyfile:FriendAssemblies.snk -r:friend_signed_A.dll friend_signed_B.vb
Module Sample
Public Sub Main()
Dim inst As New Class1
inst.Test()
End Sub
End Module
Compile y firme friend_signed_B mediante el siguiente comando.
El nombre del ensamblado generado por el compilador debe coincidir con el nombre del ensamblado de confianza que se ha pasado al atributo InternalsVisibleToAttribute. Debe especificar explícitamente el nombre del ensamblado de salida ( .exe o .dll) mediante la opción -out del compilador. Para obtener más información, vea OutputAssembly (Opciones del compilador de C#) o -out (Visual Basic).
El origen de este contenido se puede encontrar en GitHub, donde también puede crear y revisar problemas y solicitudes de incorporación de cambios. Para más información, consulte nuestra guía para colaboradores.
Comentarios de .NET
.NET es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios:
Obtenga información sobre cómo implementar clases mediante técnicas avanzadas como clases estáticas, clases parciales e inicializadores de objetos que pueden mejorar la legibilidad, el mantenimiento y la organización del código.