Administración de recursos con MRT Core

MRT Core es una versión simplificada del moderno sistema de administración de recursos de Windows que se distribuye como parte del SDK de Aplicaciones para Windows.

MRT Core tiene características en tiempo de compilación y en tiempo de ejecución. En tiempo de compilación, el sistema crea un índice de todas las variantes diferentes de los recursos que se empaquetan con la aplicación. Este índice es el índice de recursos del paquete, o PRI, y también se incluye en el paquete de la aplicación.

Requisitos previos

Para usar las API de MRT Core en el SDK de Aplicaciones para Windows:

  1. Descargue e instale la versión más reciente del SDK de Aplicaciones para Windows. Para más información, consulte Instalación de herramientas para el SDK de Aplicaciones para Windows.
  2. Siga las instrucciones para crear su primer proyecto de WinUI 3 o para usar el SDK de aplicaciones para Windows en un proyecto existente.

Para obtener más información sobre la disponibilidad de MRT Core en el SDK de Aplicaciones para Windows, consulte canales de versión.

Archivo de índice de recursos de paquete (PRI)

Cada paquete de aplicación debe contener un índice binario de los recursos de la aplicación. Este índice se crea en tiempo de compilación y se encuentra en uno o varios archivos PRI. Cada archivo PRI contiene una colección de recursos con nombre que hace referencia a una asignación de recursos.

Un archivo PRI contiene recursos de cadena reales. Los recursos de ruta de acceso de archivo y binario incrustados se indexan directamente desde los archivos del proyecto. Un paquete normalmente contiene un único archivo PRI por idioma, denominado resources.pri. El archivo resources.pri en la raíz de cada paquete se carga automáticamente cuando se crea una instancia del objeto ResourceManager .

Los archivos PRI solo contienen datos, por lo que no usan el formato portable ejecutable (PE). Están diseñados específicamente para ser solo datos.

Nota

En el caso de las aplicaciones .NET, en SDK de Aplicaciones para Windows versión 0.8 y posteriores, la propiedad Archivo de acción de compilación para archivos de recursos en Visual Studio se establece automáticamente, lo que reduce la necesidad de configuración manual del proyecto. La versión 1.0 introdujo el problema 1674. Esto se ha corregido en la versión 1.1 (desde el canal estable), pero la corrección requiere el SDK de .NET 6.0.300 o posterior. Si usa una versión inferior del SDK de .NET, siga usando la solución alternativa en las notas de la versión 1.0.

Acceso a los recursos de la aplicación con MRT Core

MRT Core proporciona varias maneras diferentes de acceder a los recursos de la aplicación.

Nota

En SDK de Aplicaciones para Windows versión preliminar 1.0 y versiones posteriores, las API de MRT Core se encuentran en el espacio de nombres Microsoft.Windows.ApplicationModel.Resources. En versiones anteriores, se encuentran en el espacio de nombres Microsoft.ApplicationModel.Resources .

Funcionalidad básica con ResourceLoader

La manera más sencilla de acceder a los recursos de la aplicación mediante programación es mediante la clase ResourceLoader . ResourceLoader proporciona acceso básico a los recursos de cadena desde el conjunto de archivos de recursos, bibliotecas a las que se hace referencia u otros paquetes.

Funcionalidad avanzada con ResourceManager

La clase ResourceManager proporciona información adicional sobre los recursos, como la enumeración y la inspección. Esto va más allá de lo que proporciona la clase ResourceLoader .

Un objeto ResourceCandidate representa un único valor de recurso concreto y sus calificadores, como la cadena "Hola mundo" para inglés o "logo.scale-100.jpg" como un recurso de imagen calificado que es específico de la resolución scale-100.

Los recursos disponibles para una aplicación se almacenan en colecciones jerárquicas, a los que se puede acceder con un objeto ResourceMap . La clase ResourceManager proporciona acceso a las distintas instancias de ResourceMap de nivel superior usadas por la aplicación, que corresponden a los distintos paquetes de la aplicación. El valor resourceManager.MainResourceMap corresponde al mapa de recursos del paquete de aplicación actual y excluye los paquetes de marcos a los que se hace referencia. Cada ResourceMap se denomina para el nombre del paquete que se especifica en el manifiesto del paquete. Dentro de un ResourceMap son subárboles (consulte ResourceMap.GetSubtree). Los subárboles suelen corresponder a los archivos de recursos que contiene el recurso.

ResourceManager no solo admite el acceso a los recursos de cadena de una aplicación, sino que también mantiene la capacidad de enumerar e inspeccionar también los distintos recursos de archivo. Para evitar colisiones entre archivos y otros recursos que se originan en un archivo, todas las rutas de acceso de archivo indizada residen en un subárbol ResourceMap "Files" reservado. Por ejemplo, el archivo "\Images\logo.png" corresponde al nombre de recurso "Files/images/logo.png".

Selección de recursos apta con ResourceContext

Los candidatos de recursos se eligen en función de un resourceContext determinado, que es una colección de valores de calificador de recursos (idioma, escala, contraste, etc.). Un contexto predeterminado usa la configuración actual de la aplicación para cada valor de calificador, a menos que se invalide. Por ejemplo, los recursos como las imágenes se pueden calificar para la escala, que varía de un monitor a otro y, por tanto, de una vista de aplicación a otra. Por este motivo, cada vista de aplicación tiene un contexto predeterminado distinto. Siempre que recupere un candidato de recurso, debe pasar una instancia de ResourceContext para obtener el valor más adecuado para una vista determinada.

Ejemplo

Para ver un ejemplo que muestra cómo usar mrt Core API, consulte el ejemplo de MRT Core.

Vea también