リソース パックではなく、アプリ パッケージにリソースをビルドする

一部の種類のアプリ (多言語辞書、翻訳ツールなど) では、アプリ バンドルの既定の動作をオーバーライドし、リソースを別のリソース パッケージ (またはリソース パック) に含めるのではなく、アプリ パッケージにリソースをビルドする必要があります。 このトピックでは、その方法について説明します。

既定では、 アプリ バンドル (.appxbundle) をビルドすると、言語、スケール、DirectX 機能レベルの既定のリソースのみがアプリ パッケージに組み込まれます。 翻訳されたリソースと、既定以外のスケールや DirectX 機能レベルに合わせて調整されたリソースは、リソース パッケージに組み込まれており、必要なデバイスにのみダウンロードされます。 ユーザーが言語の優先順位がスペイン語に設定されたデバイスを使用して Microsoft Store からアプリを購入する場合、アプリとスペイン語のリソース パッケージのみがダウンロードおよびインストールされます。 同じユーザーが後から [設定] で言語の優先順位をフランス語に変更した場合は、アプリのフランス語のリソース パッケージがダウンロードおよびインストールされます。 スケールおよび DirectX 機能レベルに対して修飾されたリソースでも同様のことが行われます。 ほとんどのアプリでは、この動作は重要な効率を構成し、ユーザーと顧客が行 いたいと考えています

ただし、([設定] からではなく) アプリ内ですぐにユーザーが言語を変更できるようにしている場合、その既定の動作は適切ではありません。 実際にはすべての言語リソースがアプリと一緒に一度に無条件にダウンロードおよびインストールされ、デバイスに残る必要があります。 別のリソース パッケージではなく、アプリ パッケージにこれらのリソースをすべて組み込む必要があります。

メモ アプリ パッケージにリソースを含めると、基本的にアプリのサイズが増加します。 そのため、アプリの特性によりそれが必要とされる場合にのみ実行する価値があります。 それ以外の場合は、通常のアプリ バンドルを通常どおりにビルドする以外は何も処理を行う必要はありません。

Visual Studio を構成して、2 つの方法のいずれかでアプリ パッケージにリソースを組み込むことができます。 構成ファイルをプロジェクトに追加することも、プロジェクト ファイルを直接編集することもできます。 これらのオプションのうち、最も使い慣れているオプション、またはビルド システムで最適に動作するオプションを使用します。

方法 1. priconfig.packaging.xml を使用して、アプリ パッケージにリソースを組み込む

  1. Visual Studio で、新しい項目をプロジェクトに追加します。 XML ファイルを選択し、ファイルに priconfig.packaging.xml という名前を付けます。
  2. ソリューション エクスプ ローラーで、priconfig.packaging.xml を選択し、[プロパティ] ウィンドウを確認します。 ファイルの [ビルド アクション] を [なし] に設定し、[出力ディレクトリにコピー] を [コピーしない] に設定します。
  3. ファイルの内容をこの XML に置き換えます。
    <packaging>
       <autoResourcePackage qualifier="Language" />
       <autoResourcePackage qualifier="Scale" />
       <autoResourcePackage qualifier="DXFeatureLevel" />
    </packaging>
    
  4. <autoResourcePackage> 要素は Visual Studio に対して、特定の修飾子名のリソースを別のリソース パッケージに自動的に分割するように指示します。 これは自動分割と呼ばれます。 ファイルの内容はこれまでのものであり、Visual Studio の動作を実際には変更していません。 言い換えると、Visual Studio は、これらのコンテンツが既定値であるため、このファイルが存在する かのように既に動作 しています。 修飾子名で Visual Studio を自動分割しない場合は、ファイルからその <autoResourcePackage> 要素を削除します。 すべての言語リソースが別のリソース パッケージに自動分割されるのではなくアプリ パッケージに組み込まれるようにする場合、ファイルの外観は次のようになります。
    <packaging>
       <autoResourcePackage qualifier="Scale" />
       <autoResourcePackage qualifier="DXFeatureLevel" />
    </packaging>
    
  5. ファイルを保存して閉じ、プロジェクトをリビルドします。

自動分割の選択肢が適用されていることを確認するには、<ProjectFolder>\obj\<ReleaseConfiguration folder>\split.priconfig.xml ファイルを探し、その内容が選択内容に一致することを確認します。 一致する場合は、選択したリソースをアプリ パッケージに組み込むように Visual Studio を正常に構成したことになります。

実行する必要がある最後の手順が 1 つあります。 ただし、Language 修飾子名 を削除した場合にのみ行います。 アプリの既定の言語として、アプリでサポートされているすべての言語の和集合を指定する必要があります。 詳細については、「アプリで使用する既定のリソースを指定する」を参照してください。 アプリ パッケージに英語、スペイン語、フランス語のリソースを含んでいる場合、priconfig.default.xml の内容は次のようになります。

   <default>
      <qualifier name="Language" value="en;es;fr" />
      ...
   </default>

この処理のしくみ

バックグラウンドで、Visual Studio は MakePri.exe というツールを起動し、パッケージ リソース インデックスと呼ばれるファイルを生成します。このファイルには、自動分割するリソース修飾子名を示すなど、アプリのすべてのリソースについての情報を記述しています。 このツールの詳細については、「MakePri.exe を使用して手動でリソースをコンパイルする」を参照してください。 Visual Studio は、構成ファイルを MakePri.exe に渡します。 priconfig.packaging.xml ファイルの内容はその構成ファイルの <packaging> 要素として使用され、これが自動分割を指定する部分となります。 そのため、最終的には priconfig.packaging.xml を追加および編集すると、Visual Studio がアプリに対して生成するパッケージ リソース インデックス ファイルの内容だけでなく、アプリ バンドルのパッケージの内容に影響します。

priconfig.packaging.xml とは異なるファイル名の使用

ファイルに priconfig.packaging.xml という名前を付けると、Visual Studio はそれを自動的に認識して使用します。 異なる名前を付けた場合、Visual Studio がそれを認識できるようにする必要があります。 プロジェクト ファイルで、<PropertyGroup> 要素の開始タグと終了タグの間にこの XML を追加します。

<AppxPriConfigXmlPackagingSnippetPath>FILE-PATH-AND-NAME</AppxPriConfigXmlPackagingSnippetPath>

を、ファイルの パスと名前に置き換えます FILE-PATH-AND-NAME

方法 2. プロジェクト ファイルを使用して、アプリ パッケージにリソースを組み込む

これは、オプション 1 に代わる方法です。 オプション 1 のしくみを理解したら、開発やビルドのワークフローに適している場合は、代わりにオプション 2 を選択できます。

プロジェクト ファイルで、<PropertyGroup> 要素の開始タグと終了タグの間にこの XML を追加します。

<AppxBundleAutoResourcePackageQualifiers>Language|Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers>

最初の修飾子名を削除した後の外観を次に示します。

<AppxBundleAutoResourcePackageQualifiers>Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers>

ファイルを保存して閉じ、プロジェクトをリビルドします。

実行する必要がある最後の手順が 1 つあります。 ただし、Language 修飾子名 を削除した場合にのみ行います。 アプリの既定の言語として、アプリでサポートされているすべての言語の和集合を指定する必要があります。 詳細については、「アプリで使用する既定のリソースを指定する」を参照してください。 これは、アプリ パッケージに英語、スペイン語、フランス語のリソースを含める場合にプロジェクト ファイルに含まれるものです。

<AppxDefaultResourceQualifiers>Language=en;es;fr</AppxDefaultResourceQualifiers>