Condividi tramite


Gestire le risorse con MRT Core

MRT Core è una versione semplificata della versione moderna di Windows Resource Management System distribuita come parte di il Windows App SDK.

MRT Core include funzionalità in fase di compilazione e di runtime. In fase di compilazione, il Sistema crea un indice di tutte le varianti diverse delle risorse disponibili nel pacchetto della tua app. Questo indice è l'indice delle risorse del pacchetto o PRI ed è incluso anche nel pacchetto dell'app.

Prerequisiti

Per usare le API MRT Core nel Windows App SDK:

  1. Scaricare e installare la versione più recente del Windows App SDK. Per ulteriori informazioni, consultare Introduzione a WinUI 3.
  2. Seguire le istruzioni per creare il primo progetto WinUI o per usare il Windows App SDK in un progetto esistente.

Per altre informazioni sulla disponibilità di MRT Core nel Windows App SDK, vedere release channels.

File di Indice Risorse del Pacchetto (PRI)

Ogni pacchetto dell'app deve contenere un indice binario delle risorse nell'app. Questo indice viene creato in fase di compilazione ed è contenuto in uno o più file PRI. Ogni file PRI contiene una raccolta denominata di risorse, denominata mappa delle risorse.

Un file PRI contiene risorse stringa effettive. Le risorse binarie e di percorso file incorporate vengono indicizzate direttamente dai file project. Un pacchetto contiene in genere un singolo file PRI per ogni lingua, denominato resources.pri. Il file resources.pri nella radice di ogni pacchetto viene caricato automaticamente quando viene creata un'istanza dell'oggetto ResourceManager.

I file PRI contengono solo dati, quindi non usano il formato PE (Portable Executable). Sono progettati specificamente per essere solo dati.

Nota

Per le app .NET, in Windows App SDK versione 0.8 e successive, la proprietà Build Action dei file di risorse in Visual Studio viene impostata automaticamente, riducendo la necessità di una configurazione manuale del progetto. La versione 1.0 ha introdotto issue 1674. Questo problema è risolto nella versione 1.1 (dal canale stabile), ma la correzione richiede .NET SDK 6.0.300 o versione successiva. Se si utilizza una versione inferiore di .NET SDK, per favore continuare a usare la soluzione alternativa nelle note di rilascio della versione 1.0.

Accesso alle risorse dell'applicazione con MRT Core

MRT Core offre diversi modi diversi per accedere alle risorse dell'app.

Nota

Nelle versioni Windows App SDK 1.0 Preview 1 e successive le API MRT Core si trovano nello spazio dei nomi Microsoft.Windows.ApplicationModel.Resources. Nelle versioni precedenti, si trovano nello spazio dei nomi Microsoft.ApplicationModel.Resources.

Funzionalità di base con ResourceLoader

Il modo più semplice per access le risorse dell'app a livello di codice consiste nell'usare la classe ResourceLoader. ResourceLoader fornisce l'accesso di base alle risorse di stringhe a partire dal set di file di risorse, dalle librerie di riferimento o da altri pacchetti.

Funzionalità avanzate con ResourceManager

La classe ResourceManager fornisce informazioni aggiuntive sulle risorse, ad esempio l'enumerazione e l'ispezione. Questo va oltre ciò che la classe ResourceLoader fornisce.

Un oggetto ResourceCandidate rappresenta un singolo valore di risorsa concreta e i relativi qualificatori, ad esempio la stringa "Hello World" per l'inglese o "logo.scale-100.jpg" come risorsa immagine qualificata specifica della risoluzione di scala-100.

Le risorse disponibili per un'applicazione vengono archiviate in raccolte gerarchiche, che è possibile accedere con un oggetto ResourceMap. La classe ResourceManager fornisce accesso alle varie istanze di alto livello di ResourceMap usate dall'app, che corrispondono ai vari pacchetti dell'applicazione. Il valore ResourceManager.MainResourceMap corrisponde alla mappa delle risorse per il pacchetto dell'app corrente ed esclude tutti i pacchetti framework a cui si fa riferimento. Ogni ResourceMap viene denominato per il nome del pacchetto specificato nel manifesto del pacchetto. All'interno di un oggetto ResourceMap sono sottoalberi (vedere ResourceMap.GetSubtree). I sottoalberi corrispondono in genere ai file di risorse che contengono la risorsa.

Il ResourceManager non solo supporta access alle risorse stringa di un'app, ma mantiene anche la possibilità di enumerare ed esaminare anche le varie risorse file. Per evitare conflitti tra file e altre risorse che provengono dall'interno di un file, tutti i percorsi di file indicizzati si trovano all'interno di un sottoalbero "Files"ResourceMap riservato. Ad esempio, il file '\Images\logo.png' corrisponde al nome della risorsa 'Files/images/logo.png'.

Qualificare la selezione delle risorse con ResourceContext

I candidati alle risorse vengono scelti in base a un particolare ResourceContext, ovvero una raccolta di valori qualificatori di risorse (lingua, scala, contrasto e così via). Un contesto predefinito usa la configurazione corrente dell'app per ogni valore qualificatore, a meno che non venga sottoposto a override. Ad esempio, le risorse come le immagini possono essere qualificate per la scalabilità, che variano da un monitor a un altro e quindi da una visualizzazione dell'applicazione a un'altra. Per questo motivo, ogni visualizzazione applicazione ha un contesto predefinito distinto. Ogni volta che si recupera un candidato risorsa, è necessario passare un'istanza di ResourceContext per ottenere il valore più appropriato per una visualizzazione determinata.

Esempio

Per un esempio che illustra come usare l'API MRT Core, vedere l'esempio MRT Core.

Vedi anche