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 experimental más reciente del SDK de Aplicaciones para Windows. Para obtener más información, consulte Introducción a WinUI.
  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 la 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 con nombre de recursos, denominada asignación de recursos.

Un archivo PRI contiene recursos de cadena reales. Los recursos de ruta de acceso de archivos y binarios 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 los 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 del 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 enumeración e 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 específico para la resolución scale-100.

Los recursos disponibles para una aplicación se almacenan en colecciones jerárquicas, a los que 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 normalmente corresponden a los archivos de recursos que contienen 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 los distintos recursos de archivo. Para evitar colisiones entre archivos y otros recursos que se originan desde dentro de 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".

Calificar la selección de recursos 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, lo que varía de un monitor a otro y, por lo 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 obtener un ejemplo que muestre cómo usar la API de MRT Core, consulte el ejemplo de MRT Core.

Consulte también