Compartir a través de


Nombres seguros

La solución a los problemas descritos consiste en asociar de forma más segura la compilación de un ensamblado de componentes con la aplicación cliente. Esta compilación distintiva se indica mediante la combinación de un número de versión y un valor especial, denominado originador. Así, el sistema puede aislar estos ensamblados de componentes de forma que se pueden ejecutar versiones diferentes al mismo tiempo para distintas aplicaciones cliente, algo que no era posible en el pasado. Este sistema de protección recibe a veces el nombre de ejecución simultánea (en contraste con la ejecución compatible con versiones anteriores), debido a que las aplicaciones se pueden ejecutar junto con otras versiones de las mismas aplicaciones sin afectar a sus respectivos entornos de ejecución.

El código que demuestra cómo agregar estos atributos de compilación adicionales y cómo crear un componente compartido se puede encontrar en el subdirectorio 4_Shared. A partir del código de 3_SimplePath, en este paso se agrega un segundo componente compartido que invierte una matriz de cadenas.

Primero, cree este nuevo ensamblado de componentes sin especificar las opciones que lo crearían como compartido. Si simplemente compila el nuevo componente Reverser.dll utilizando, por ejemplo, BuildNoShare.bat (que se encuentra en el subdirectorio \4_Shared\), podrá examinar los metadatos con Ildasm.exe, que muestra que al ensamblado le falta un originador y que no se ha establecido un número de versión:

.assembly Reverser
{  ...
  .hash algorithm 0x00008004
  .ver 0:0:0:0
}

Para marcar un ensamblado como compartido, tiene que compilarlo con una clave privada. Las claves privadas se utilizan para la comprobación. Por lo tanto, antes de compilar, tiene que generar un par de claves pública y privada. Utilice la herramienta Nombre seguro (Sn.exe) para generar un nuevo par de claves y colocarlas en un archivo (se encuentra en el subdirectorio \4_Shared\Reverser):

sn –k orgKey.snk

Ahora que dispone de una clave privada, está preparado para compilar el componente y especificar el archivo de claves y el número de versión que le va a asignar. Puede hacerlo si especifica los atributos AssemblyVersion y AssemblyKeyFile del archivo Reverser.cs con el símbolo de compilación condicional STRONG:

#if STRONG
[assembly: System.Reflection.AssemblyVersion("1.0.0.0")]
[assembly: System.Reflection.AssemblyKeyFile("orgKey.snk")]
#endif

A continuación, debe definir STRONG en el proceso de compilación:

csc.exe /define:STRONG ... Reverser.cs

Si ejecuta Ildasm.exe de nuevo con Reverser.dll, podrá comprobar que ahora el ensamblado se puede compartir, como indica la presencia de la propiedad .publickey y de la propiedad .ver, que no contiene el valor predeterminado 1.0.0.0:

.assembly Reverser
{  ...
  .publickey = (00 ... FC 4A DC 9B 9C)
  .hash algorithm 0x00008004
  .ver 1:0:0:0
}

Para obtener más información acerca de la herramienta Nombre seguro (SN.exe), vea la sección acerca de dicha utilidad en el tema Apéndice B: Herramientas de empaquetado e implementación de este tutorial.

Vea también

Implementar componentes compartidos | (5) Control de versiones de componentes | Resumen de empaquetado e implementación | Apéndice A: Información adicional acerca del empaquetado y de la implementación | Apéndice B: Herramientas de empaquetado e implementación