Gestire le risorse con MRT Core
MRT Core è una versione semplificata del moderno sistema di gestione delle risorse di Windows che viene distribuito come parte di 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 in Windows App SDK:
- Scaricare e installare la versione più recente di SDK per app di Windows. Per altre informazioni, vedere Introduzione a WinUI.
- Seguire le istruzioni per creare il primo progetto WinUI 3 o per usare SDK per app di Windows in un progetto esistente.
Per altre informazioni sulla disponibilità di MRT Core in Windows App SDK, vedere Canali di rilascio.
File PRI (Package Resource Index)
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 di progetto. 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à del file Azione di compilazione per i file di risorse in Visual Studio viene impostata automaticamente, riducendo la necessità di configurazione manuale del progetto. La versione 1.0 ha introdotto il problema 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 usa una versione precedente di .NET SDK, continuare a usare la soluzione alternativa nelle note sulla versione 1.0.
Accedere alle risorse dell'app con MRT Core
MRT Core offre diversi modi per accedere alle risorse dell'app.
Nota
In Windows App SDK 1.0 Preview 1 e versioni 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 accedere alle risorse dell'app a livello di codice consiste nell'usare la classe ResourceLoader . ResourceLoader fornisce l'accesso di base alle risorse stringa 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 concreto e i relativi qualificatori, ad esempio la stringa "Hello World" per l'inglese o "logo.scale-100.jpg" come risorsa immagine qualificata specifica per la risoluzione di scala 100 .
Le risorse disponibili per un'app vengono archiviate in raccolte gerarchica, a cui è possibile accedere con un oggetto ResourceMap . La classe ResourceManager fornisce l'accesso alle varie istanze di ResourceMap di primo livello usate dall'app, che corrispondono ai vari pacchetti per l'app. 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.
ResourceManager non solo supporta l'accesso 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 alla risorsa, è necessario passare un'istanza di ResourceContext per ottenere il valore più appropriato per una determinata visualizzazione.
Esempio
Per un esempio che illustra come usare l'API MRT Core, vedere l'esempio MRT Core.