Verwalten von Ressourcen mit MRT Core

MRT Core ist eine optimierte Version des modernen Windows-Ressourcenverwaltungssystems, das als Teil der Windows App SDK verteilt wird.

MRT Core verfügt sowohl über Buildzeit- als auch Laufzeitfeatures. Zur Buildzeit erstellt das System einen Index aller verschiedenen Varianten der Ressourcen, die mit Ihrer App gepackt sind. Dieser Index ist der Paketressourcenindex (PRI) und ist auch im Paket Ihrer App enthalten.

Voraussetzungen

So verwenden Sie MRT Core-APIs im Windows App SDK:

  1. Laden Sie die neueste Version der Windows App SDK herunter, und installieren Sie es. Weitere Informationen finden Sie unter Installieren von Tools für das Windows App SDK.
  2. Befolgen Sie die Anweisungen zum Erstellen Ihres ersten WinUI 3-Projekts oder zum Verwenden des Windows App SDK in einem vorhandenen Projekt.

Weitere Informationen zur Verfügbarkeit von MRT Core im Windows App SDK finden Sie unter Releasekanäle.

PRI-Datei (Package Resource Index)

Jedes App-Paket sollte einen binären Index der Ressourcen in der App enthalten. Dieser Index wird zur Buildzeit erstellt und ist in einer oder mehreren PRI-Dateien enthalten. Jede PRI-Datei enthält eine benannte Auflistung von Ressourcen, die als Ressourcenzuordnung bezeichnet wird.

Eine PRI-Datei enthält tatsächliche Zeichenfolgenressourcen. Eingebettete Binär- und Dateipfadressourcen werden direkt aus den Projektdateien indiziert. Ein Paket enthält in der Regel eine einzelne PRI-Datei pro Sprache mit dem Namen resources.pri. Die Datei resources.pri im Stammverzeichnis jedes Pakets wird automatisch geladen, wenn das ResourceManager-Objekt instanziiert wird.

PRI-Dateien enthalten nur Daten, sodass sie nicht das PE-Format (Portable Executable) verwenden. Sie sind speziell für datengeschützt konzipiert.

Hinweis

Für .NET-Apps wird in Windows App SDK Version 0.8 und höher die Eigenschaft Buildaktionsdatei für Ressourcendateien in Visual Studio automatisch festgelegt, wodurch die Notwendigkeit einer manuellen Projektkonfiguration verringert wird. Version 1.0 hat Das Problem 1674 eingeführt. Dies wurde in Version 1.1 (über den stabilen Kanal) behoben, aber für den Fix ist .NET SDK 6.0.300 oder höher erforderlich. Wenn Sie eine niedrigere Version des .NET SDK verwenden, verwenden Sie weiterhin die Problemumgehung in den Versionshinweisen 1.0.

Zugreifen auf App-Ressourcen mit MRT Core

MRT Core bietet verschiedene Möglichkeiten, auf Ihre App-Ressourcen zuzugreifen.

Hinweis

In Windows App SDK Version 1.0 Preview 1 und höher befinden sich MRT Core-APIs im Namespace Microsoft.Windows.ApplicationModel.Resources. In früheren Versionen befinden sie sich im Namespace Microsoft.ApplicationModel.Resources .

Grundlegende Funktionen mit ResourceLoader

Die einfachste Möglichkeit, programmgesteuert auf Ihre App-Ressourcen zuzugreifen, ist die Verwendung der ResourceLoader-Klasse . ResourceLoader bietet Ihnen einfachen Zugriff auf Zeichenfolgenressourcen aus dem Satz von Ressourcendateien, Bibliotheken, auf die verwiesen wird, oder aus anderen Paketen.

Erweiterte Funktionalität mit ResourceManager

Die ResourceManager-Klasse stellt zusätzliche Informationen zu Ressourcen bereit, z. B. Enumeration und Überprüfung. Dies geht über das hinaus, was die ResourceLoader-Klasse bietet.

Ein ResourceCandidate-Objekt stellt einen einzelnen konkreten Ressourcenwert und seine Qualifizierer dar, z. B. die Zeichenfolge "Hallo Welt" für Englisch oder "logo.scale-100.jpg" als qualifizierte Bildressource, die spezifisch für die Skalierungsauflösung 100 ist.

Für eine App verfügbare Ressourcen werden in hierarchischen Sammlungen gespeichert, auf die Sie mit einem ResourceMap-Objekt zugreifen können. Die ResourceManager-Klasse bietet Zugriff auf die verschiedenen ResourceMap-Instanzen der obersten Ebene, die von der App verwendet werden, die den verschiedenen Paketen für die App entsprechen. Der Wert ResourceManager.MainResourceMap entspricht der Ressourcenzuordnung für das aktuelle App-Paket und schließt alle Frameworkpakete aus, auf die verwiesen wird. Jede ResourceMap wird nach dem Paketnamen benannt, der im Manifest des Pakets angegeben ist. Innerhalb einer ResourceMap befinden sich Unterstrukturen (siehe ResourceMap.GetSubtree). Die Unterstrukturen entsprechen in der Regel den Ressourcendateien, die die Ressource enthalten.

Der ResourceManager unterstützt nicht nur den Zugriff auf die Zeichenfolgenressourcen einer App, es behält auch die Möglichkeit, die verschiedenen Dateiressourcen aufzulisten und zu überprüfen. Um Konflikte zwischen Dateien und anderen Ressourcen zu vermeiden, die aus einer Datei stammen, befinden sich indizierte Dateipfade alle in einer reservierten ResourceMap-Unterstruktur "Files". Die Datei "\Images\logo.png" entspricht beispielsweise dem Ressourcennamen "Files/images/logo.png".

Qualifizieren der Ressourcenauswahl mit ResourceContext

Ressourcenkandidaten werden basierend auf einem bestimmten ResourceContext ausgewählt, bei dem es sich um eine Sammlung von Ressourcenqualifizierern (Sprache, Skalierung, Kontrast usw.) handelt. Ein Standardkontext verwendet die aktuelle Konfiguration der App für jeden Qualifiziererwert, sofern er nicht überschrieben wird. Beispielsweise können Ressourcen wie Bilder für die Skalierung qualifiziert werden, die von einem Monitor zum anderen und damit von einer Anwendungssicht zur anderen variiert. Aus diesem Grund verfügt jede Anwendungsansicht über einen eigenen Standardkontext. Wenn Sie einen Ressourcenkandidaten abrufen, sollten Sie einen ResourceContext-instance übergeben, um den am besten geeigneten Wert für eine bestimmte Ansicht abzurufen.

Beispiel

Ein Beispiel, das die Verwendung der MRT Core-API veranschaulicht, finden Sie im MRT Core-Beispiel.

Siehe auch