リソースをリソース パックではなくアプリ パッケージに組み込むBuild resources into your app package, instead of into a resource pack

一部の種類のアプリ (多言語の辞書、翻訳ツールなど) は、アプリ バンドルの既定の動作をオーバーライドし、別のリソース パッケージ (またはリソース パック) ではなくアプリ パッケージにリソースを組み込む必要があります。Some kinds of apps (multilingual dictionaries, translation tools, etc.) need to override the default behavior of an app bundle, and build resources into the app package instead of having them in separate resource packages (or resource packs). このトピックでは、その方法について説明します。This topic explains how to do that.

既定では、アプリ バンドル (.appxbundle) の作成時に、言語、スケール、DirectX 機能レベルに応じた既定のリソースのみがアプリ パッケージに組み込まれます。By default when you build an app bundle (.appxbundle), only your default resources for language, scale, and DirectX feature level are built into the app package. 変換された、リソース—既定ではないスケールまたは DirectX の機能レベルに対応した、リソースと—構築されたリソースにパッケージと、のみがダウンロードを必要とするデバイス。Your translated resources—and your resources tailored for non-default scales and/or DirectX feature levels—are built into resource packages and they are only downloaded onto devices that need them. ユーザーが言語の優先順位がスペイン語に設定されたデバイスを使用して Microsoft Store からアプリを購入する場合、アプリとスペイン語のリソース パッケージのみがダウンロードおよびインストールされます。If a customer is buying your app from the Microsoft Store using a device with a language preference set to Spanish, then only your app plus the Spanish resource package are downloaded and installed. 同じユーザーが後から [設定] で言語の優先順位をフランス語に変更した場合は、アプリのフランス語のリソース パッケージがダウンロードおよびインストールされます。If that same user later changes their language preference to French in Settings, then your app's French resource package is downloaded and installed. スケールおよび DirectX 機能レベルに対して修飾されたリソースでも同様のことが行われます。Similar things happen with your resources qualified for scale and for DirectX feature level. ほとんどのアプリで、この動作は有益な効率性をもたらします。これはまさに開発者とユーザーが必要としていることです。For the majority of apps, this behavior constitutes a valuable efficiency, and it's exactly what you and the customer want to happen.

ただし、([設定] からではなく) アプリ内ですぐにユーザーが言語を変更できるようにしている場合、その既定の動作は適切ではありません。But if your app allows the user to change the language on the fly from within the app (instead of via Settings), then that default behavior is not appropriate. 実際にはすべての言語リソースがアプリと一緒に一度に無条件にダウンロードおよびインストールされ、デバイスに残る必要があります。You actually want all of your language resources to be unconditionally downloaded and installed along with the app one time, and then remain on the device. 別のリソース パッケージではなく、アプリ パッケージにこれらのリソースをすべて組み込む必要があります。You want to build all of those resources into your app package instead of into separate resource packages.

メモ アプリ パッケージにリソースを含めると、基本的にアプリのサイズが増加します。Note Including resources in an app package essentially increases the size of the app. そのため、アプリの特性によりそれが必要とされる場合にのみ実行する価値があります。That's why it's only worth doing if the nature of the app demands it. それ以外の場合は、通常のアプリ バンドルを通常どおりにビルドする以外は何も処理を行う必要はありません。If not, then you don't need to do anything except build a regular app bundle as usual.

Visual Studio を構成して、2 つの方法のいずれかでアプリ パッケージにリソースを組み込むことができます。You can configure Visual Studio to build resources into your app package in one of two ways. 構成ファイルをプロジェクトに追加するか、またはプロジェクト ファイルを直接編集することができます。You can either add a configuration file to your project, or you can edit your project file directly. これらのうち使いやすいオプション、またはビルド システムで最適に機能するオプションを使用してください。Use whichever of these options you're most comfortable with, or whichever works best with your build system.

オプション 1.Option 1. priconfig.packaging.xml を使用して、アプリ パッケージにリソースを組み込むUse priconfig.packaging.xml to build resources into your app package

  1. Visual Studio で、新しい項目をプロジェクトに追加します。In Visual Studio, add a new item to your project. XML ファイルを選択し、ファイルに priconfig.packaging.xml という名前を付けます。Choose XML File, and name the file priconfig.packaging.xml.
  2. ソリューション エクスプ ローラーで、priconfig.packaging.xml を選択し、[プロパティ] ウィンドウを確認します。In Solution Explorer, select priconfig.packaging.xml and check the Properties window. ファイルの [ビルド アクション] を [なし] に設定し、[出力ディレクトリにコピー] を [コピーしない] に設定します。The file's Build Action should be set to None, and Copy to Output Directory should be set to Do not copy.
  3. ファイルの内容をこの XML に置き換えます。Replace the contents of the file with this XML.
    <packaging>
       <autoResourcePackage qualifier="Language" />
       <autoResourcePackage qualifier="Scale" />
       <autoResourcePackage qualifier="DXFeatureLevel" />
    </packaging>
    
  4. <autoResourcePackage> 要素は Visual Studio に対して、特定の修飾子名のリソースを別のリソース パッケージに自動的に分割するように指示します。Each <autoResourcePackage> element tells Visual Studio to automatically split the resources for the given qualifier name out into separate resource packages. これは自動分割と呼ばれます。This is called auto-splitting. ファイルの内容はこれまでのものであり、Visual Studio の動作を実際には変更していません。With the file contents you have so far, you haven't actually changed Visual Studio's behavior. つまり、これらの内容が既定値であるため、Visual Studio はこれらの内容を持つファイルが存在しているかのように既に動作しましたIn other words, Visual Studio already behaved as if this file were present with these contents, because these are the defaults. Visual Studio で修飾子名に対して自動分割を行わない場合は、ファイルから <autoResourcePackage> 要素を削除します。If you don't want Visual Studio to auto-split on a qualifier name then delete that <autoResourcePackage> element from the file. すべての言語リソースが別のリソース パッケージに自動分割されるのではなくアプリ パッケージに組み込まれるようにする場合、ファイルの外観は次のようになります。Here's how the file would look if you wanted all of your language resources to be built into the app package instead of being auto-split out into separate resource packages.
    <packaging>
       <autoResourcePackage qualifier="Scale" />
       <autoResourcePackage qualifier="DXFeatureLevel" />
    </packaging>
    
  5. ファイルを保存して閉じ、プロジェクトをリビルドします。Save and close the file and rebuild your project.

自動分割の選択肢が適用されていることを確認するには、<ProjectFolder>\obj\<ReleaseConfiguration folder>\split.priconfig.xml ファイルを探し、その内容が選択内容に一致することを確認します。To confirm that your auto-split choices are being taken into account, look for the file <ProjectFolder>\obj\<ReleaseConfiguration folder>\split.priconfig.xml and confirm that its contents match your choices. 一致する場合は、選択したリソースをアプリ パッケージに組み込むように Visual Studio を正常に構成したことになります。If they do, then you have successfully configured Visual Studio to build the resources of your choice into the app package.

実行する必要がある最後の手順が 1 つあります。There is one final step that you need to do. ただし、Language 修飾子名 を削除した場合にのみ行います。But only if you deleted the Language qualifier name. 統合したすべてのアプリのサポートされている言語をアプリの言語の既定値として指定する必要があります。You need to specify the union of all of your app's supported language as your app's default for language. 詳細については、「アプリで使用する既定のリソースを指定する」を参照してください。For details, see Specify the default resources that your app uses. アプリ パッケージに英語、スペイン語、フランス語のリソースを含んでいる場合、priconfig.default.xml の内容は次のようになります。This is what your priconfig.default.xml would contain if you were including resources for English, Spanish, and French in your app package.

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

この処理のしくみHow does this work?

バックグラウンドで、Visual Studio は MakePri.exe というツールを起動し、パッケージ リソース インデックスと呼ばれるファイルを生成します。このファイルには、自動分割するリソース修飾子名を示すなど、アプリのすべてのリソースについての情報を記述しています。Behind the scenes, Visual Studio launches a tool named MakePri.exe to generate a file known as a Package Resource Index, which describes all of your app's resources, including indicating which resource qualifier names to auto-split on. このツールの詳細については、「MakePri.exe を使用して手動でリソースをコンパイルする」を参照してください。For details about this tool, see Compile resources manually with MakePri.exe. Visual Studio は、構成ファイルを MakePri.exe に渡します。Visual Studio passes a configuration file to MakePri.exe. priconfig.packaging.xml ファイルの内容はその構成ファイルの <packaging> 要素として使用され、これが自動分割を指定する部分となります。The contents of your priconfig.packaging.xml file are used as the <packaging> element of that configuration file, which is the part that determines auto-splitting. そのため、最終的には priconfig.packaging.xml を追加および編集すると、Visual Studio がアプリに対して生成するパッケージ リソース インデックス ファイルの内容だけでなく、アプリ バンドルのパッケージの内容に影響します。So, adding and editing priconfig.packaging.xml ultimately influences the contents of the Package Resource Index file that Visual Studio generates for your app, as well as the contents of the packages in your app bundle.

priconfig.packaging.xml とは異なるファイル名の使用Using a different file name than priconfig.packaging.xml

ファイルに priconfig.packaging.xml という名前を付けると、Visual Studio はそれを自動的に認識して使用します。If you name your file priconfig.packaging.xml, then Visual Studio will recognize it and use it automatically. 異なる名前を付けた場合、Visual Studio がそれを認識できるようにする必要があります。If you give it a different name, then you'll need to let Visual Studio know. プロジェクト ファイルで、<PropertyGroup> 要素の開始タグと終了タグの間にこの XML を追加します。In your project file, between the opening and closing tags of the first <PropertyGroup> element, add this XML.

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

FILE-PATH-AND-NAME をファイルのパスおよび名前に置き換えます。Replace FILE-PATH-AND-NAME with the path to, and name of, your file.

オプション 2.Option 2. プロジェクト ファイルを使用して、アプリ パッケージにリソースを組み込むUse your project file to build resources into your app package

これは、オプション 1 に代わる方法です。This is an alternative to Option 1. オプション 1 のしくみを理解したら、オプション 2 の方が開発またはビルドのワークフローに最適である場合、オプション 2 を代わりに選択することができます。Once you understand how Option 1 works, you can choose to do Option 2 instead, if that suits your development and/or build workflow better.

プロジェクト ファイルで、<PropertyGroup> 要素の開始タグと終了タグの間にこの XML を追加します。In your project file, between the opening and closing tags of the first <PropertyGroup> element, add this XML.

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

最初の修飾子名を削除したら、次のようになります。Here's how that looks after you've delete the first qualifier name.

<AppxBundleAutoResourcePackageQualifiers>Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers>

ファイルを保存して閉じ、プロジェクトをリビルドします。Save and close, and rebuild your project.

実行する必要がある最後の手順が 1 つあります。There is one final step that you need to do. ただし、Language 修飾子名 を削除した場合にのみ行います。But only if you deleted the Language qualifier name. 統合したすべてのアプリのサポートされている言語をアプリの言語の既定値として指定する必要があります。You need to specify the union of all of your app's supported language as your app's default for language. 詳細については、「アプリで使用する既定のリソースを指定する」を参照してください。For details, see Specify the default resources that your app uses. アプリ パッケージに英語、スペイン語、フランス語のリソースを含んでいる場合、プロジェクト ファイルの内容は次のようになります。This is what your project file would contain if you were including resources for English, Spanish, and French in your app package.

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