Générer des ressources dans votre package d’application, plutôt que dans un pack de ressourcesBuild resources into your app package, instead of into a resource pack

Certains types d’applications (dictionnaires multilingues, outils de traduction, etc.) doivent remplacer le comportement par défaut d’un ensemble d’applications et générer des ressources dans le package d’application, plutôt que dans des packages de ressources distincts (ou des packs de ressources).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). Cette rubrique explique la procédure à suivre.This topic explains how to do that.

Par défaut, lorsque vous générez un ensemble d’applications (.appxbundle), seules vos ressources par défaut pour la langue, la mise à l’échelle et le niveau de fonctionnalité DirectX sont intégrées dans le package d’application.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. Vos ressources traduites—et vos ressources adaptées aux échelles autres que celles par défaut et/ou aux niveaux de fonctionnalités DirectX—sont intégrées dans les packages de ressources et sont téléchargées uniquement sur les périphériques qui en ont besoin.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. Si un client achète votre application dans Microsoft Store à l’aide d’un périphérique dont la préférence linguistique a la valeur espagnol, seule votre application ainsi que le package de ressources en espagnol sont téléchargés et installés.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. Si ce même utilisateur change par la suite ses préférences linguistiques en français dans les paramètres, le package de ressources en français de votre application est téléchargé et installé.If that same user later changes their language preference to French in Settings, then your app's French resource package is downloaded and installed. La même chose se produit avec vos ressources qualifiées pour la mise à l’échelle et le niveau de fonctionnalité DirectX.Similar things happen with your resources qualified for scale and for DirectX feature level. Pour la plupart des applications, ce comportement est très efficace : c’est exactement ce que le client et vous-même souhaitez voir se produire.For the majority of apps, this behavior constitutes a valuable efficiency, and it's exactly what you and the customer want to happen.

Mais si votre application autorise l’utilisateur à modifier la langue à la volée à partir de l’application (plutôt que via les paramètres), ce comportement par défaut n’est pas approprié.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. Il est en effet préférable que toutes vos ressources linguistiques soit téléchargées sans condition et installées avec l’application une fois, puis qu’elles restent sur le périphérique.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. Toutes ces ressources doivent alors être générées dans votre package d’application, plutôt que dans des packages de ressources distincts.You want to build all of those resources into your app package instead of into separate resource packages.

Remarque Le fait d’inclure des ressources dans un package d’application augmente substantiellement la taille de l’application.Note Including resources in an app package essentially increases the size of the app. C’est pourquoi cette décision ne doit être prise que si la nature de l’application l’exige.That's why it's only worth doing if the nature of the app demands it. Si ce n’est pas le cas, vous n’avez rien à faire, hormis générer un ensemble d’applications standard comme d’habitude.If not, then you don't need to do anything except build a regular app bundle as usual.

Vous pouvez configurer Visual Studio pour qu’il génère des ressources dans votre package d’application de l’une ou l’autre des deux manières.You can configure Visual Studio to build resources into your app package in one of two ways. Vous pouvez soit ajouter un fichier de configuration à votre projet, soit modifier votre fichier de projet directement.You can either add a configuration file to your project, or you can edit your project file directly. Utilisez l’option avec laquelle vous êtes le plus à l’aise, ou celle qui fonctionne le mieux avec votre système de génération.Use whichever of these options you're most comfortable with, or whichever works best with your build system.

Option 1.Option 1. Utilisez priconfig.packaging.xml pour générer des ressources dans votre package d’applicationUse priconfig.packaging.xml to build resources into your app package

  1. Dans Visual Studio, ajoutez un nouvel élément à votre projet.In Visual Studio, add a new item to your project. Choisissez le fichier XML et nommez-le priconfig.packaging.xml.Choose XML File, and name the file priconfig.packaging.xml.
  2. Dans l’Explorateur de solutions, sélectionnez priconfig.packaging.xmlet vérifiez la fenêtre Propriétés.In Solution Explorer, select priconfig.packaging.xml and check the Properties window. L’option Action de génération du fichier doit être définie sur Aucun, et Copier dans le répertoire de sortie sur Ne pas copier.The file's Build Action should be set to None, and Copy to Output Directory should be set to Do not copy.
  3. Remplacez le contenu du fichier par ce code XML.Replace the contents of the file with this XML.
    <packaging>
       <autoResourcePackage qualifier="Language" />
       <autoResourcePackage qualifier="Scale" />
       <autoResourcePackage qualifier="DXFeatureLevel" />
    </packaging>
    
  4. Chaque élément <autoResourcePackage> indique à Visual Studio qu’il doit fractionner automatiquement les ressources pour le nom de qualificateur donné en packages de ressources distincts.Each <autoResourcePackage> element tells Visual Studio to automatically split the resources for the given qualifier name out into separate resource packages. C’est ce que l’on appelle le fractionnement automatique .This is called auto-splitting. Avec le contenu du fichier que vous avez actuellement, vous n’avez pas véritablement modifié le comportement de Visual Studio.With the file contents you have so far, you haven't actually changed Visual Studio's behavior. En d’autres termes, Visual Studio se comportait déjà comme si ce fichier était présent avec ce contenu, car c’est le comportement par défaut.In other words, Visual Studio already behaved as if this file were present with these contents, because these are the defaults. Si vous ne voulez pas que Visual Studio effectue un fractionnement automatique sur un nom de qualificateur, supprimez cet élément <autoResourcePackage> du fichier.If you don't want Visual Studio to auto-split on a qualifier name then delete that <autoResourcePackage> element from the file. Voici à quoi ressemblerait le fichier si vous vouliez que toutes vos ressources linguistiques soient intégrées dans le package d’application au lieu d’être fractionnées automatiquement en packages de ressources distincts.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. Enregistrez le fichier et fermez-le, puis générez une nouvelle fois votre projet.Save and close the file and rebuild your project.

Pour vérifier que vos choix de fractionnement automatique sont pris en compte, recherchez le fichier <ProjectFolder>\obj\<ReleaseConfiguration folder>\split.priconfig.xmlet confirmez que son contenu correspond à vos choix.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. Si tel est le cas, vous avez correctement configuré Visual Studio pour générer les ressources de votre choix dans le package d’application.If they do, then you have successfully configured Visual Studio to build the resources of your choice into the app package.

Vous devez effectuer une étape finale.There is one final step that you need to do. Ceci est valable uniquement si vous avez supprimé le nom de qualificateur Language .But only if you deleted the Language qualifier name. Vous devez spécifier l’union de toutes les langues prises en charge par votre application comme langue par défaut de votre application.You need to specify the union of all of your app's supported language as your app's default for language. Pour plus d’informations, consultez Préciser les ressources par défaut que votre application utilise.For details, see Specify the default resources that your app uses. Voici ce que contiendrait votre fichier priconfig.default.xml si vous englobiez des ressources pour l’anglais, l’espagnol et le français dans votre package d’application.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>

Comment cela fonctionne ?How does this work?

En coulisse, Visual Studio lance un outil nommé MakePri.exe pour générer un fichier appelé un index de ressource de package, qui décrit toutes les ressources de votre application et qui indique notamment sur quels noms de qualificateurs de ressources effectuer le fractionnement automatique.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. Pour plus d’informations sur cet outil, consultez Compiler des ressources manuellement avec MakePri.exe .For details about this tool, see Compile resources manually with MakePri.exe. Visual Studio envoie un fichier de configuration à MakePri.exe.Visual Studio passes a configuration file to MakePri.exe. Le contenu de votre fichier priconfig.packaging.xml est utilisé en tant qu’élément <packaging> de ce fichier de configuration, qui correspond à la partie qui détermine le fractionnement automatique.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. Ainsi, si vous ajoutez et modifiez priconfig.packaging.xml, vous influencez en fin de compte le contenu du fichier d’index de ressource de package que Visual Studio génère pour votre application, ainsi que le contenu des packages dans votre ensemble d’application.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.

Utilisation d’un nom de fichier différent de priconfig.packaging.xmlUsing a different file name than priconfig.packaging.xml

Si vous nommez votre fichier priconfig.packaging.xml, Visual Studio le reconnaît et l’utilise automatiquement.If you name your file priconfig.packaging.xml, then Visual Studio will recognize it and use it automatically. Si vous lui donnez un nom différent, vous devez l’indiquer à Visual Studio.If you give it a different name, then you'll need to let Visual Studio know. Dans votre fichier de projet, entre les balises d’ouverture et de fermeture du premier élément <PropertyGroup>, ajoutez ce fichier 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>

Remplacez FILE-PATH-AND-NAME par le chemin d’accès à votre fichier et son nom.Replace FILE-PATH-AND-NAME with the path to, and name of, your file.

Option 2.Option 2. Utilisez votre fichier de projet pour générer des ressources dans votre package d’applicationUse your project file to build resources into your app package

Ceci est une alternative à l’option 1.This is an alternative to Option 1. Une fois que vous comprenez le fonctionnement de l’option 1, vous pouvez choisir d’utiliser l’option 2 à la place, si elle correspond mieux à votre flux de travail de développement et/ou de génération.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.

Dans votre fichier de projet, entre les balises d’ouverture et de fermeture du premier élément <PropertyGroup>, ajoutez ce fichier XML.In your project file, between the opening and closing tags of the first <PropertyGroup> element, add this XML.

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

Voici à quoi ressemble le fichier une fois que vous avez supprimé le premier nom de qualificateur.Here's how that looks after you've delete the first qualifier name.

<AppxBundleAutoResourcePackageQualifiers>Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers>

Enregistrez et fermez-le, puis générez une nouvelle fois votre projet.Save and close, and rebuild your project.

Vous devez effectuer une étape finale.There is one final step that you need to do. Ceci est valable uniquement si vous avez supprimé le nom de qualificateur Language .But only if you deleted the Language qualifier name. Vous devez spécifier l’union de toutes les langues prises en charge par votre application comme langue par défaut de votre application.You need to specify the union of all of your app's supported language as your app's default for language. Pour plus d’informations, consultez Préciser les ressources par défaut que votre application utilise.For details, see Specify the default resources that your app uses. Voici ce que contiendrait votre fichier de projet si vous englobiez des ressources pour l’anglais, l’espagnol et le français dans votre package d’application.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>