MRT Core を使用してリソースを管理する

MRT Core は、Windows アプリ SDK の一部として配布される最新の Windows リソース管理システムの簡素化されたバージョンです。

MRT Core には、ビルド時と実行時の両方の機能があります。 ビルド時に、システムは、アプリとしてパッケージ化されているリソースのさまざまなバリエーションすべてのインデックスを作成します。 このインデックスがパッケージ リソース インデックス (PRI) であり、アプリのパッケージにも含まれています。

前提条件

Windows アプリ SDK で MRT Core API を使用するには、次のようにします。

  1. Windows App SDK の最新リリースをダウンロードしてインストールします。 詳細については、「Windows App SDK 用ツールをインストールする」を参照してください。
  2. 手順に従って、最初の WinUI 3 プロジェクトを作成するか、既存のプロジェクトで Windows App SDK を使用します

Windows アプリ SDK で MRT Core を使用できるかどうかについては、リリース チャネルに関する記事を参照してください。

パッケージ リソース インデックス (PRI) ファイル

すべてのアプリ パッケージには、アプリ内のリソースのバイナリ インデックスが格納されている必要があります。 このインデックスはビルド時に作成され、1 つまたは複数の PRI ファイルに含まれています。 各 PRI ファイルは、リソース マップと呼ばれる、リソースの名前付きコレクションを含みます。

PRI ファイルには、実際の文字列リソースが含まれています。 埋め込みバイナリおよびファイル パスのリソースは、プロジェクト ファイルから直接インデックス付けされます。 通常、パッケージには resources.pri という名前の PRI ファイルが言語ごとに 1 つ含まれています。 各パッケージのルートにある resources.pri ファイルは、ResourceManager オブジェクトがインスタンス化されたときに自動的に読み込まれます。

PRI ファイルにはデータのみが格納され、移植可能な実行可能ファイル (PE) 形式は使用されません。 これらは、データのみであるように設計されています。

注意

.NET アプリの場合、バージョン 0.8 以降Windows アプリ SDK、Visual Studio のリソース ファイルのビルド アクション ファイル プロパティが自動的に設定されるため、プロジェクトの手動構成が不要になります。 バージョン 1.0 では 、問題 1674 が導入されました。 これは (安定チャネルから) 1.1 で修正されますが、修正には .NET SDK 6.0.300 以降が必要です。 .NET SDK の下位バージョンを使用している場合は、1.0 リリース ノートの回避策を引き続き使用してください。

MRT Core を使用したアプリ リソースへのアクセス

MRT Core には、アプリのリソースにアクセスするためのさまざまな方法が用意されています。

注意

Windows アプリ SDK 1.0 プレビュー 1 以降のリリースでは、MRT Core API は Microsoft.Windows.ApplicationModel.Resources 名前空間にあります。 それ以前のリリースでは、MRT Core API は Microsoft.ApplicationModel.Resources 名前空間にあります。

ResourceLoader の基本機能

プログラムによってアプリ リソースにアクセスする最も簡単な方法は、ResourceLoader クラスを使用する方法です。 ResourceLoader を使うと、一連のリソース ファイル、参照ライブラリ、または他のパッケージの文字列リソースへの基本的なアクセスが可能になります。

ResourceManager の高度な機能

ResourceManager クラスでは、リソースに関する追加情報 (列挙、検査など) が提供されます。 このクラスは、ResourceLoader クラスが提供する情報よりも多くの情報を提供します。

ResourceCandidate オブジェクトは、英語向けの文字列 "Hello World" や scale-100 解像度に固有の修飾子付きのイメージ リソースである "logo.scale-100.jpg" など、単一の具象リソース値と修飾子の組み合わせです。

アプリで使うことができるリソースは、ResourceMap オブジェクトを使ってアクセスできる階層コレクションに格納されます。 ResourceManager クラスを使うと、アプリで使われる各種のトップレベルの ResourceMap インスタンスにアクセスできます。これらのインスタンスは、アプリのさまざまなパッケージに対応しています。 ResourceManager.MainResourceMap の値は、参照されているフレームワーク パッケージではなく現在のアプリ パッケージのリソース マップに対応しています。 それぞれの ResourceMap には、パッケージのマニフェストに指定されたパッケージ名に基づく名前が付けられます。 ResourceMap にはサブツリー (「ResourceMap.GetSubtree」を参照) が含まれています。 通常、サブツリーは、リソースが含まれるリソース ファイルに対応します。

ResourceManager は、アプリの文字列リソースへのアクセスをサポートするだけでなく、さまざまなファイル リソースを列挙し検査する機能も保持します。 ファイルとその他のリソース (ファイル内から提供されるリソース) との衝突を回避するために、すべてのインデックス付きファイル パスは、予約済みの "Files" ResourceMap サブツリーに配置されます。 たとえば、ファイル '\Images\logo.png' はリソース名 'Files/images/logo.png' に対応しています。

ResourceContext を使用してリソースの選択を修飾する

リソース候補は、リソース修飾子の値 (言語、スケール、コントラストなど) のコレクションである特定の ResourceContext に基づいて選ばれます。 既定のコンテキストでは、上書きされない限り、それぞれの修飾子の値に対してアプリの現在の構成が使われます。 たとえば、画像などのリソースはスケールで修飾することができます。スケールはモニターごとに異なり、したがってアプリケーション ビューごとに異なります。 この理由から、アプリケーション ビューはそれぞれ別個の既定のコンテキストを持ちます。 リソース候補を取得するときは常に ResourceContext インスタンスを渡して、特定のビューに最も適した値を取得する必要があります。

[サンプル]

MRT Core API の使用方法を示すサンプルについては、MRT Core サンプルに関するページを参照してください。

関連項目