Partager via


Gérer les ressources avec MRT Core

MRT Core est une version simplifiée du système de gestion des ressources Windows moderne distribué dans le cadre du Kit de développement logiciel (SDK) d’application Windows.

MRT Core a 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 variantes différentes 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 Kit de développement logiciel (SDK) d’application Windows :

  1. Téléchargez et installez la dernière version du SDK d'application Windows. Pour plus d’informations, consultez Prise en main de WinUI.
  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 Kit de développement logiciel (SDK) d’application Windows, consultez les 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 il est contenu dans un ou plusieurs fichiers PRI. Chaque fichier PRI contient une collection nommée de ressources, appelée carte de ressources.

Un fichier PRI contient des ressources de chaîne réelles. Les ressources de chemin d’accès binaire et 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.

Remarque

Pour les applications .NET, dans le Kit de développement logiciel (SDK) d’application Windows version 0.8 et ultérieure, la propriété du fichier Action de génération 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. Cette opération est corrigée dans la version 1.1 (à partir du canal stable), mais le correctif nécessite le Kit de développement logiciel (SDK) .NET 6.0.300 ou version ultérieure. Si vous utilisez une version inférieure du Kit de développement logiciel (SDK) .NET, continuez à utiliser la solution de contournement 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 à vos ressources d’application.

Remarque

Dans windows App SDK 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, elles se trouvent dans l’espace de noms Microsoft.ApplicationModel.Resources .

Fonctionnalités de base avec ResourceLoader

Le moyen le plus simple d’accéder à vos ressources d’application par programmation consiste à utiliser la classe ResourceLoader . ResourceLoader vous offre 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 scale-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 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 sont 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 également la possibilité d’énumérer et d’inspecter les différentes ressources de fichiers. Pour éviter les collisions entre les fichiers et d’autres ressources provenant d’un fichier, les chemins d’accès de fichiers indexés se trouvent tous dans une sous-arborescence ResourceMap réservée. Par exemple, le fichier « \Images\logo.png » correspond au nom de la ressource « Files/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 (langage, échelle, contraste, etc.). Un contexte par défaut utilise la configuration actuelle de l’application pour chaque valeur de qualificateur, sauf substitution. Par exemple, les ressources telles que les images peuvent être qualifiées pour la mise à l’échelle, qui varient 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 à la 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