Recursos en aplicaciones .NET

Casi todas las aplicaciones de calidad de producción tienen que utilizar recursos. Un recurso es cualquier dato no ejecutable que se implemente lógicamente con una aplicación. Los recursos pueden mostrarse en una aplicación como mensajes de error o como parte de la interfaz de usuario. Los recursos pueden contener datos con varios formatos, como objetos almacenados, cadenas e imágenes. (Para poder escribir objetos almacenados en un archivo de recursos, los objetos deben ser serializables). Si los datos se almacenan en un archivo de recursos, es posible modificarlos sin volver a compilar toda la aplicación. Esto también permite almacenar los datos en una sola ubicación y elimina la necesidad de confiar en los datos codificados de forma rígida almacenados en varias ubicaciones.

.NET proporciona numerosas prestaciones para la creación y la localización de recursos. Además, .NET admite un modelo simple para empaquetar e implementar recursos localizados.

Creación y localización de recursos

En una aplicación no localizada, puede usar archivos de recursos como repositorio de los datos de la aplicación, especialmente para las cadenas que de otra manera podrían estar codificadas de forma rígida en varias ubicaciones del código fuente. Lo más común es que los recursos se creen como archivos de texto (.txt) o XML (.resx), y se use Resgen.exe (Generador de archivo de recursos) para compilarlos en archivos binarios .resources. Estos archivos después se pueden insertar en el archivo ejecutable de la aplicación mediante un compilador de lenguaje. Para obtener más información sobre la creación de recursos, consulte Creación de archivos de recursos.

También puede localizar los recursos de una aplicación para determinadas referencias culturales. Esto le permite compilar versiones localizadas (traducidas) de las aplicaciones. Cuando desarrolle una aplicación que utiliza recursos adaptados, debe designar una referencia cultural que sirva de referencia cultural neutra o de reserva cuyos recursos se utilizarán si no se dispone de recursos apropiados. Normalmente, los recursos de la referencia cultural neutra se almacenan en el ejecutable de la aplicación. Los recursos restantes para las distintas referencias culturales se almacenan en ensamblados satélite independientes. Para obtener más información, consulte Creación de ensamblados satélite.

Empaquetar e implementar recursos

Los recursos adaptados de una aplicación se implementan en ensamblados satélite. Un ensamblado satélite contiene los recursos de una única referencia cultural; no contiene código de la aplicación. En el modelo de implementación de ensamblados satélite, una aplicación se crea con un ensamblado predeterminado (que normalmente es el principal) y un ensamblado satélite para cada referencia cultural que admite la aplicación. Debido a que los ensamblados satélite no forman parte del ensamblado principal, los recursos correspondientes a una referencia cultural específica se pueden reemplazar o actualizar fácilmente sin reemplazar el ensamblado principal de la aplicación.

Es preciso determinar con sumo cuidado qué recursos formarán parte del ensamblado de recursos predeterminado de la aplicación. Como se trata de una parte del ensamblado principal, cualquier cambio que se realice en dicho ensamblado requerirá la reemplazo del ensamblado principal. Si no se proporciona ningún recurso predeterminado, se generará una excepción cuando el proceso de reserva de recursos intente buscarlo. En una aplicación diseñada correctamente, el uso de recursos jamás deberá producir una excepción.

Para más información, consulte el artículo Empaquetado e implementación de recursos.

Recuperar recursos

En tiempo de ejecución, la aplicación carga los recursos adaptados apropiados para cada subproceso, en función de la referencia cultural especificada por la propiedad CultureInfo.CurrentUICulture. El valor de esta propiedad se deriva de la siguiente manera:

  • Mediante la asignación directa de un objeto CultureInfo que representa la referencia cultural adaptada a la propiedad Thread.CurrentUICulture.

  • Si no se ha asignado explícitamente una referencia cultural, mediante la recuperación de la referencia cultural de la interfaz de usuario predeterminada del subproceso de la propiedad CultureInfo.DefaultThreadCurrentUICulture.

  • Si no se ha asignado explícitamente ninguna referencia cultural a la interfaz de usuario predeterminada del subproceso, mediante la recuperación de la referencia cultural del usuario actual del equipo local. Las implementaciones de .NET que se ejecutan en Windows realizan esta operación mediante una llamada a la función GetUserDefaultUILanguage de Windows.

Para obtener más información sobre cómo establecer la referencia cultural de la interfaz de usuario actual, consulte las páginas de referencia de CultureInfo y de CultureInfo.CurrentUICulture.

Puede recuperar los recursos para la referencia cultural de la interfaz de usuario actual o para una referencia cultural concreta con la clase System.Resources.ResourceManager. Aunque la clase ResourceManager se usa principalmente para recuperar recursos, el espacio de nombres System.Resources contiene tipos adicionales que puede usar para recuperar recursos. Se incluyen los siguientes:

  • La clase ResourceReader, que permite enumerar recursos insertados en un ensamblado o almacenados en un archivo binario .resources independiente. Resulta útil cuando no se conocen los nombres exactos de los recursos que están disponibles en tiempo de ejecución.

  • La clase ResXResourceReader, que permite recuperar recursos de un archivo XML (.resx).

  • La clase ResourceSet, que permite recuperar los recursos de una referencia cultural específica sin observar las reglas de reserva. Los recursos se pueden almacenar en un ensamblado o un archivo binario .resources independiente. También se puede desarrollar una implementación de IResourceReader que permite usar la clase ResourceSet para recuperar recursos de algún otro origen.

  • La clase ResXResourceSet, que permite cargar en la memoria todos los elementos de un archivo de recursos XML.

Vea también