Gérer les ressources avec MRT Core

MRT Core est une version simplifiée du système de gestion des ressources Windows moderne qui est distribuée dans le cadre de la SDK d'application Windows.

MRT Core a à la fois des fonctionnalités au moment de la génération et au moment de l’exécution. Au moment de la génération, le système crée un index de toutes les différentes variantes des ressources empaquetées avec votre application. Cet index est l’index de ressource de package, ou PRI, et il est également inclus dans le package de votre application.

Prérequis

Pour utiliser les API MRT Core dans le SDK d'application Windows :

  1. Téléchargez et installez la dernière version du SDK d'application Windows. Pour plus d’informations, consultez Installer des outils pour le SDK d’application Windows.
  2. Suivez les instructions relatives à la création de votre premier projet WinUI 3 ou à l’utilisation du SDK d’application Windows dans un projet existant.

Pour en savoir plus sur la disponibilité de MRT Core dans le SDK d'application Windows, consultez Canaux de mise en production.

Fichier PRI (Package Resource Index)

Chaque package d’application doit contenir un index binaire des ressources de l’application. Cet index est créé au moment de la génération et est contenu dans un ou plusieurs fichiers PRI. Chaque fichier PRI contient un ensemble nommé de ressources, que l'on qualifie de mappage des ressources.

Un fichier PRI contient des ressources de chaîne réelles. Les ressources binaires et de chemins de fichier incorporées sont indexées directement à partir des fichiers projet. Un package contient généralement un seul fichier PRI par langue, nommé resources.pri. Le fichier resources.pri à la racine de chaque package est automatiquement chargé lorsque l’objet ResourceManager est instancié.

Les fichiers PRI contiennent uniquement des données, de sorte qu’ils n’utilisent pas le format exécutable portable (PE). Elles sont spécifiquement conçues pour être des données uniquement.

Notes

Pour les applications .NET, dans SDK d'application Windows version 0.8 et ultérieure, la propriété Générer un fichier Action pour les fichiers de ressources dans Visual Studio est automatiquement définie, ce qui réduit la nécessité d’une configuration manuelle du projet. La version 1.0 a introduit le problème 1674. Ce problème est résolu dans la version 1.1 (à partir du canal stable), mais le correctif nécessite le SDK .NET 6.0.300 ou une version ultérieure. Si vous utilisez une version inférieure du Kit de développement logiciel (SDK) .NET, continuez à utiliser la solution de contournement décrite dans les notes de publication 1.0.

Accéder aux ressources d’application avec MRT Core

MRT Core fournit plusieurs façons d’accéder aux ressources de votre application.

Notes

Dans SDK d'application Windows 1.0 Preview 1 et versions ultérieures, les API MRT Core se trouvent dans l’espace de noms Microsoft.Windows.ApplicationModel.Resources. Dans les versions antérieures, ils se trouvent dans l’espace de noms Microsoft.ApplicationModel.Resources .

Fonctionnalités de base avec ResourceLoader

Le moyen le plus simple d’accéder aux ressources de votre application par programmation consiste à utiliser la classe ResourceLoader . ResourceLoader vous fournit un accès de base aux ressources de chaîne à partir de l’ensemble de fichiers de ressources, de bibliothèques référencées ou d’autres packages.

Fonctionnalités avancées avec ResourceManager

La classe ResourceManager fournit des informations supplémentaires sur les ressources, telles que l’énumération et l’inspection. Cela va au-delà de ce que fournit la classe ResourceLoader .

Un objet ResourceCandidate représente une seule valeur de ressource concrète et ses qualificateurs, tels que la chaîne « Hello World » pour l’anglais ou « logo.scale-100.jpg » en tant que ressource d’image qualifiée spécifique à la résolution d’échelle 100.

Les ressources disponibles pour une application sont stockées dans des collections hiérarchiques auxquelles vous pouvez accéder avec un objet ResourceMap . La classe ResourceManager permet d’accéder aux différentes instances ResourceMap de niveau supérieur utilisées par l’application, qui correspondent aux différents packages de l’application. La valeur ResourceManager.MainResourceMap correspond au mappage de ressources pour le package d’application actuel et exclut tous les packages d’infrastructure référencés. Chaque ResourceMap est nommé pour le nom du package spécifié dans le manifeste du package. Dans un ResourceMap se trouvent des sous-arborescences (voir ResourceMap.GetSubtree). Les sous-arborescences correspondent généralement aux fichiers de ressources qui contiennent la ressource.

ResourceManager prend non seulement en charge l’accès aux ressources de chaîne d’une application, mais conserve également la possibilité d’énumérer et d’inspecter les différentes ressources de fichiers. Afin d’éviter les collisions entre les fichiers et d’autres ressources provenant d’un fichier, les chemins d’accès aux fichiers indexés résident tous dans une sous-arborescence ResourceMap « Files » réservée. Par exemple, le fichier « \Images\logo.png » correspond au nom de ressource « Fichiers/images/logo.png ».

Qualifier la sélection de ressources avec ResourceContext

Les candidats aux ressources sont choisis en fonction d’un ResourceContext particulier, qui est une collection de valeurs de qualificateur de ressource (langue, échelle, contraste, etc.). Un contexte par défaut utilise la configuration actuelle de l’application pour chaque valeur de qualificateur, sauf si elle est remplacée. Par exemple, les ressources telles que les images peuvent être qualifiées pour la mise à l’échelle, qui varie d’un moniteur à l’autre et donc d’une vue d’application à une autre. Pour cette raison, chaque vue d’application a un contexte par défaut distinct. Chaque fois que vous récupérez un candidat de ressource, vous devez passer une instance ResourceContext pour obtenir la valeur la plus appropriée pour une vue donnée.

Exemple

Pour obtenir un exemple qui montre comment utiliser l’API MRT Core, consultez l’exemple MRT Core.

Voir aussi