Cómo: Crear ensamblados de confianza firmados
Actualización: noviembre 2007
En este ejemplo se muestra cómo usar los ensamblados de confianza con ensamblados que tienen nombres seguros. Ambos ensamblados deben tener nombres seguros. Aunque los dos ensamblados de este ejemplo utilizan las mismas claves, se pueden usar claves diferentes para dos ensamblados.
Para crear un ensamblado firmado y un ensamblado de confianza en Visual Studio
Abra un símbolo del sistema de Visual Studio.
Utilice la secuencia de comandos siguiente 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 Herramienta de nombre seguro (Sn.exe).
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 nuevo archivo de Visual Basic llamado FriendAssembliesSnA.vb que contenga el código siguiente. El código utiliza el atributo InternalsVisibleToAttribute para declarar FriendAssembliesSnB como ensamblado de confianza.
La herramienta de nombre seguro genera una nueva clave pública cada vez que se ejecuta. Por consiguiente, debe reemplazar la clave pública del código siguiente por la clave pública que acaba de generar, como se muestra en el ejemplo siguiente.
' FriendAssembliesSnA.vb. ' Compile with: ' Vbc.exe /target:library /keyfile:FriendAssemblies.snk FriendAssembliesSnA.vb Imports System.Runtime.CompilerServices ' Replace the value of PublicKey with your public key. <Assembly: InternalsVisibleTo("FriendAssembliesSnB, PublicKey=" & _ "002400000480000094000000060200000024000052534131000400000100010065364c" & _ "640a04ab7c4f06313779601ffb5d1284b381393ad2ede92b4bf91384bbfdb0f9b7ecf6" & _ "a387b7f9348fc59366987429db41ee061c1a808eb408c4ebd9aebd0d4b19b721121a0d" & _ "c66949f12878c4e2add5489f6208f49e67ddee4d0bb72fa6860a775b7e2232209efe8b" & _ "4566ea8bd9319a4b8feb3ef4911e7a7d2e957a92")> ' Friend class. Friend Class FriendAssembliesSnA Public Sub Test() MsgBox("Friend Assemblies Sample") End Sub End Class
Compile y firme FriendAssembliesSnA.vb:
Vbc.exe /target:library /keyfile:FriendAssemblies.snk FriendAssembliesSnA.vb
Cree un nuevo archivo de Visual Basic llamado FriendAssembliesSnB.vb que contenga el código siguiente. Dado que en FriendAssembliesSnA se especificó FriendAssembliesSnB como ensamblado de confianza, el código en FriendAssembliesSnB puede tener acceso a los miembros y tipos Friend de FriendAssembliesSnA.
' FriendAssembliesSnB.vb. ' Compile with: ' Vbc.exe /keyfile:FriendAssemblies.snk /r:FriendAssembliesSnA.dll FriendAssembliesSnB.vb Module FriendAssembliesSnB Public Sub Main() ' Access a Friend class. Dim friendTest As New FriendAssembliesSnA friendTest.Test() End Sub End Module
Compile y firme FriendAssembliesSnB.vb:
Vbc.exe /keyfile:FriendAssemblies.snk /r:FriendAssembliesSnA.dll FriendAssembliesSnB.vb
El nombre del ensamblado generado por el compilador debe coincidir con el nombre del ensamblado de confianza pasado al atributo InternalsVisibleToAttribute. Puede establecer explícitamente el ensamblado utilizando la opción del compilador /out. Para obtener más información, vea /out (Visual Basic).
Ejecute FriendAssembliesSnB.exe.
El programa muestra un cuadro de mensaje que contiene la cadena "Friend Assemblies Sample".
Seguridad
Hay similitudes entre el atributo InternalsVisibleToAttribute y la clase StrongNameIdentityPermission. La diferencia principal es que StrongNameIdentityPermission puede exigir los permisos de seguridad para ejecutar una sección de código determinada, mientras que el atributo InternalsVisibleToAttribute controla la visibilidad de los miembros y tipos Friend.
Vea también
Tareas
Cómo: Crear ensamblados de confianza no firmados
Conceptos
Ensamblados Friend (Visual Basic)
Referencia
Herramienta de nombre seguro (Sn.exe)