Crear ensamblados satélite

Actualización: noviembre 2007

El modelo de concentrador y radio descrito en el tema Empaquetar e implementar recursos corresponde a la implementación de diseño recomendada para desarrollar aplicaciones con recursos.

Dicho modelo requiere colocar recursos en determinadas ubicaciones, de modo que sean fáciles de buscar y utilizar. Si no se compilan los recursos ni se asignan nombres a los recursos según lo esperado, o si no se colocan los recursos en las ubicaciones correctas, el motor en tiempo de ejecución no los encontrará. Como resultado, el motor en tiempo de ejecución utilizará el conjunto de recursos predeterminados. Para obtener más información sobre los nombres de recursos, vea la Clase CultureInfo o el tema Empaquetar e implementar recursos.

Compilar ensamblados satélite

Utilice la Assembly Linker (Al.exe)para compilar los archivos .resources en ensamblados satélite. Al.exe crea un ensamblado a partir de los archivos .resources especificados. Por definición, los ensamblados satélite sólo pueden contener recursos. No pueden contener ningún código ejecutable.

El siguiente comando de Al.exe crea un ensamblado satélite para la aplicación MyApp a partir del archivo strings.de.resources.

al /t:lib /embed:strings.de.resources /culture:de /out:MyApp.resources.dll

El siguiente comando de Al.exe crea un ensamblado satélite para la aplicación MyApp a partir del archivo strings.de.resources. La opción /template hace que el ensamblado satélite herede los metadatos de ensamblado del ensamblado principal MyApp.dll.

al /t:lib /embed:strings.de.resources /culture:de /out:MyApp.resources.dll
/template:MyApp.dll

En la siguiente tabla se explican más detalladamente las opciones de Al.exe utilizadas en estos ejemplos.

Opción

Descripción

/t:lib

La opción /t especifica que el ensamblado satélite se compila en un archivo de biblioteca (.dll). No se puede ejecutar un ensamblado satélite debido a que no contiene código y no es el ensamblado principal de una aplicación. Por consiguiente, es preciso guardar los ensamblados satélite como archivos DLL.

/embed:strings.de.resources

La opción /embed especifica el nombre del archivo de código fuente que se va a utilizar cuando Al.exe compile el ensamblado. Se pueden incrustar varios archivos .resources en un ensamblado satélite. Sin embargo, en caso de que se siga el modelo de concentrador y radio, se ha de compilar un ensamblado satélite por cada referencia cultural. No obstante, se pueden crear archivos .resources independientes para cadenas y objetos.

/culture:de

La opción /culture especifica la referencia cultural del recurso que se va a compilar. El motor en tiempo de ejecución utiliza esta información cuando busca los recursos correspondientes a una referencia cultural especificada. Si se omite esta opción, Al.exe compilará el recurso pero el motor en tiempo de ejecución no lo encontrará cuando lo solicite un usuario.

/out:MyApp.resources.dll

La opción /out especifica el nombre del archivo de resultados. El nombre debe seguir el estándar de nomenclatura nombreBase.resources.extensión, donde nombreBase corresponde al nombre del ensamblado principal y extensión a una extensión viable (por ejemplo, .dll). Observe que el motor en tiempo de ejecución no puede determinar la referencia cultural de un ensamblado satélite en base al nombre del archivo de resultados. Por ello, es importante especificar una referencia cultural mediante la opción /culture anteriormente descrita.

/templatenombre_de_archivo

La opción /template especifica un ensamblado del que se van a heredar todos los metadatos, salvo el campo correspondiente a la referencia cultural. El ensamblado del que hereda el ensamblado satélite debe tener un nombre seguro.

Para obtener una lista completa de las opciones disponibles con Al.exe, vea Assembly Linker (Al.exe).

Compilar ensamblados satélite con nombres seguros

Si desea instalar ensamblados satélite en la caché de ensamblados global, éstos deben tener nombres seguros. Los ensamblados con nombre seguro se firman con un par válido de claves (una pública y una privada). Para obtener más información sobre los nombres seguros, vea Ensamblados con nombre seguro.

Al desarrollar una aplicación, es poco probable que se tenga acceso al par de claves pública y privada final. Para instalar un ensamblado satélite en la caché de ensamblados global y garantizar que funciona debidamente, se podrá utilizar una técnica denominada firma retardada. Cuando se retrasa la firma de un ensamblado, se reserva espacio en el archivo para la firma del nombre seguro en tiempo de generación. Se retrasa la firma real hasta una fecha posterior en la que esté disponible el par de claves pública y privada final.

Obtener la clave pública

Para retrasar la firma de un ensamblado, se ha de tener acceso a la clave pública. Se puede obtener la clave pública real de la organización de la compañía que se encarga de la firma, o crear una clave pública mediante la herramienta Nombre seguro (Sn.exe).

El comando Sn.exe siguiente crea un par de claves pública y privada de prueba y lo guarda en el archivo TestKeyPair.snk. La opción –k indica a Sn.exe que debe crear un nuevo par de claves y guardarlo en el archivo especificado.

sn –k TestKeyPair.snk 

Se puede extraer la clave pública del archivo que contiene el par de claves de prueba. El comando siguiente extrae la clave pública del archivo TestKeyPair.snk y la almacena en el archivo PublicKey.snk.

sn –p TestKeyPair.snk PublicKey.snk

Retrasar la firma de un ensamblado

Tras obtener o crear la clave pública, utilice la Assembly Linker (Al.exe) para compilar el ensamblado y especificar la firma retardada.

El siguiente comando de Al.exe crea un ensamblado satélite con nombre seguro para la aplicación MyApp a partir del archivo strings.ja.resources.

al /t:lib /embed:strings.ja.resources /culture:ja /out:MyApp.resources.dll /delay+ /keyfile:PublicKey.snk

La opción /delay+ especifica que se va a retrasar la firma del ensamblado. La opción /keyfile: especifica el nombre del archivo de claves que contiene la clave pública que se va a utilizar para retrasar la firma del ensamblado.

Para obtener más información sobre las firmas retardadas, vea Retrasar la firma de un ensamblado.

Los ensamblados con nombre seguro contienen información de versión que el motor en tiempo de ejecución utiliza para determinar el ensamblado que va a utilizar con el fin de responder a una solicitud de enlace. Para obtener más información sobre este tema, vea Versiones de ensamblado.

Volver a firmar un ensamblado

Más adelante, es preciso volver a firmar los ensamblados satélite con firma retardada utilizando el par de claves real. Para ello, utilice Sn.exe.

El comando Sn.exe siguiente firma MyApp.resources.dll con el par de claves real almacenado en el archivo RealKeyPair.snk. La opción –R indica a Sn.exe que debe volver a firmar un ensamblado firmado anteriormente o con retraso de firma.

sn –R MyApp.resources.dll RealKeyPair.snk 

Instalar un ensamblado satélite en la caché de ensamblados global

En el proceso de reserva de recursos, la caché de ensamblados global es el primer lugar donde el motor en tiempo de ejecución busca los recursos. Para obtener más información, vea el subtema "Proceso de reserva de recursos" del tema Empaquetar e implementar recursos. Por lo tanto, es importante saber cómo instalar recursos en la caché de ensamblados global. Un ensamblado satélite que se haya compilado con un nombre seguro está listo para ser instalado en la caché de ensamblados global. Los ensamblados con nombre seguro se pueden instalar en la caché mediante la Herramienta Caché de ensamblados global (Gacutil.exe).

El siguiente comando de Gacutil.exe instala MyApp.resources.dll en la caché de ensamblados global.

gacutil /i:MyApp.resources.dll

La opción /i especifica a Gacutil.exe que instale el ensamblado especificado en la caché de ensamblados global. Como resultado de este comando, se coloca una entrada en la caché, la cual permite tener acceso a las entradas en este archivo .resources. Tras instalarlo en la caché, el recurso especificado estará disponible para todas las aplicaciones diseñadas con el fin de utilizarlo.

Ubicaciones de los directorios de los ensamblados satélite no instalados en la caché de ensamblados global

Tras compilar los ensamblados satélite, todos tienen el mismo nombre. El motor en tiempo de ejecución los diferencia de acuerdo con la referencia cultural especificada en tiempo de compilación mediante la opción /culture de Al.exe y de acuerdo con la ubicación del directorio de cada ensamblado. Los ensamblados satélite deben colocarse en las ubicaciones de directorio esperadas.

En la siguiente ilustración se muestra un ejemplo de los requisitos de ubicación y estructura de directorios para las aplicaciones que no se instalan en la caché de ensamblados global. Los elementos con las extensiones de archivo .txt y .resources no se incluirán en la aplicación final. Éstos son los archivos de recursos intermedios que se utilizan para crear los ensamblados de recursos satélite finales. En este ejemplo, se pueden reemplazar los archivos .resx por los archivos .txt. Los archivos .resx son el único tipo de archivos de recursos intermedios que puede contener objetos.

Directorio de ensamblados satélite

Nota:

Si la aplicación incluye recursos para subreferencias culturales, coloque cada subreferencia cultural en su correspondiente directorio. No coloque las subreferencias culturales en subdirectorios del directorio correspondiente a la referencia cultural principal.

Vea también

Conceptos

Empaquetar e implementar recursos

Retrasar la firma de un ensamblado

Recursos en aplicaciones

Referencia

Herramienta Assembly Linker (Al.exe)

Herramienta de nombre seguro (Sn.exe)

Herramienta Caché de ensamblados global (Gacutil.exe)