Créer des ressources dans votre package d’application au lieu d’un pack de ressources
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 au lieu de les avoir dans des packages de ressources distincts (ou des packs de ressources). Cette rubrique explique la procédure à suivre.
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 au package d’application. Vos ressources traduites et vos ressources adaptées aux niveaux de fonctionnalités non par défaut et/ou DirectX sont intégrées aux packages de ressources, et elles sont téléchargées uniquement sur les appareils qui en ont besoin. Si un client achète votre application à partir du Microsoft Store à l’aide d’un appareil avec une préférence de langue définie sur l’espagnol, seule votre application plus le package de ressources espagnols sont téléchargés et installés. Si ce même utilisateur modifie ultérieurement sa préférence de langue en français dans Paramètres, le package de ressources français de votre application est téléchargé et installé. Des choses similaires se produisent avec vos ressources qualifiées pour la mise à l’échelle et pour le niveau de fonctionnalité DirectX. Pour la majorité des applications, ce comportement constitue une efficacité précieuse, et c’est ce que vous et le client souhaitez faire.
Toutefois, si votre application permet à l’utilisateur de modifier la langue à la volée à partir de l’application (au lieu d’utiliser les paramètres), ce comportement par défaut n’est pas approprié. Vous souhaitez réellement que toutes vos ressources linguistiques soient téléchargées et installées de manière inconditionnelle avec l’application une seule fois, puis restent sur l’appareil. Vous souhaitez générer toutes ces ressources dans votre package d’application plutôt que dans des packages de ressources distincts.
Notez que l’inclusion de ressources dans un package d’application augmente essentiellement la taille de l’application. C’est pourquoi il vaut seulement la peine de faire si la nature de l’application l’exige. Si ce n’est pas le cas, vous n’avez pas besoin de faire quoi que ce soit, à l’exception de créer un bundle d’applications standard comme d’habitude.
Vous pouvez configurer Visual Studio pour générer des ressources dans votre package d’application de deux façons. Vous pouvez ajouter un fichier de configuration à votre projet ou modifier directement votre fichier projet. Utilisez l’une de ces options que vous êtes le plus à l’aise ou celle qui fonctionne le mieux avec votre système de génération.
Option 1. Utilisez priconfig.packaging.xml pour générer des ressources dans votre package d’application
- Dans Visual Studio, ajoutez un nouvel élément à votre projet. Choisissez fichier XML et nommez le fichier
priconfig.packaging.xml
. - Dans Explorateur de solutions, sélectionnez
priconfig.packaging.xml
et cochez la Fenêtre Propriétés. L’action de génération du fichier doit être définie sur None, et copier dans le répertoire de sortie doit être défini sur Ne pas copier. - Remplacez le contenu du fichier par ce code XML.
<packaging> <autoResourcePackage qualifier="Language" /> <autoResourcePackage qualifier="Scale" /> <autoResourcePackage qualifier="DXFeatureLevel" /> </packaging>
- Chaque
<autoResourcePackage>
élément indique à Visual Studio de fractionner automatiquement les ressources du nom de qualificateur donné en packages de ressources distincts. C’est ce qu’on appelle le fractionnement automatique. Avec le contenu du fichier que vous avez jusqu’à présent, vous n’avez pas réellement modifié le comportement de Visual Studio. En d’autres termes, Visual Studio se comporte déjà comme si ce fichier était présent avec ce contenu, car il s’agit des valeurs par défaut. Si vous ne souhaitez pas que Visual Studio se fractionne automatiquement sur un nom de qualificateur, supprimez cet<autoResourcePackage>
élément du fichier. Voici comment le fichier ressemblerait si vous vouliez que toutes vos ressources linguistiques soient intégrées au package d’application au lieu d’être fractionnées automatiquement en packages de ressources distincts.<packaging> <autoResourcePackage qualifier="Scale" /> <autoResourcePackage qualifier="DXFeatureLevel" /> </packaging>
- Enregistrez et fermez le fichier et régénérez votre projet.
Pour vérifier que vos choix de fractionnement automatique sont pris en compte, recherchez le fichier <ProjectFolder>\obj\<ReleaseConfiguration folder>\split.priconfig.xml
et vérifiez que son contenu correspond à vos choix. Si c’est le cas, vous avez correctement configuré Visual Studio pour générer les ressources de votre choix dans le package d’application.
Il y a une dernière étape que vous devez faire. Mais seulement si vous avez supprimé le nom du Language
qualificateur. Vous devez spécifier l’union de toutes les langues prises en charge par votre application comme langue par défaut de votre application. Pour plus d’informations, consultez Spécifier les ressources par défaut utilisées par votre application. C’est ce que vous priconfig.default.xml
pourriez contenir si vous incluiez des ressources pour l’anglais, l’espagnol et le français dans votre package d’application.
<default>
<qualifier name="Language" value="en;es;fr" />
...
</default>
Comment cela fonctionne ?
En arrière-plan, Visual Studio lance un outil nommé MakePri.exe
pour générer un fichier appelé index de ressource de package, qui décrit toutes les ressources de votre application, notamment en indiquant les noms de qualificateurs de ressources à fractionner automatiquement. Pour plus d’informations sur cet outil, consultez Compiler les ressources manuellement avec MakePri.exe. Visual Studio transmet un fichier de configuration à MakePri.exe
. Le contenu de votre priconfig.packaging.xml
fichier est utilisé comme <packaging>
élément de ce fichier de configuration, qui est la partie qui détermine le fractionnement automatique. Par conséquent, l’ajout et la modification priconfig.packaging.xml
influencent finalement le contenu du fichier d’index de ressources de package généré par Visual Studio pour votre application, ainsi que le contenu des packages dans votre ensemble d’applications.
Utilisation d’un nom de fichier différent de celui de priconfig.packaging.xml
Si vous nommez votre fichier priconfig.packaging.xml
, Visual Studio le reconnaît et l’utilise automatiquement. Si vous lui donnez un autre nom, vous devez informer Visual Studio. Dans votre fichier projet, entre les balises d’ouverture et de fermeture du premier <PropertyGroup>
élément, ajoutez ce code XML.
<AppxPriConfigXmlPackagingSnippetPath>FILE-PATH-AND-NAME</AppxPriConfigXmlPackagingSnippetPath>
Remplacez FILE-PATH-AND-NAME
par le chemin d’accès et le nom de votre fichier.
Option 2. Utiliser votre fichier projet pour générer des ressources dans votre package d’application
Il s’agit d’une alternative à l’option 1. Une fois que vous avez compris le fonctionnement de l’option 1, vous pouvez choisir d’effectuer l’option 2 à la place si cela convient mieux à votre flux de travail de développement et/ou de génération.
Dans votre fichier projet, entre les balises d’ouverture et de fermeture du premier <PropertyGroup>
élément, ajoutez ce code XML.
<AppxBundleAutoResourcePackageQualifiers>Language|Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers>
Voici comment cela s’occupe après avoir supprimé le prénom du qualificateur.
<AppxBundleAutoResourcePackageQualifiers>Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers>
Enregistrez et fermez et régénérez votre projet.
Il y a une dernière étape que vous devez faire. Mais seulement si vous avez supprimé le nom du Language
qualificateur. Vous devez spécifier l’union de toutes les langues prises en charge par votre application comme langue par défaut de votre application. Pour plus d’informations, consultez Spécifier les ressources par défaut utilisées par votre application. Il s’agit de ce que contient votre fichier projet si vous incluez des ressources pour l’anglais, l’espagnol et le français dans votre package d’application.
<AppxDefaultResourceQualifiers>Language=en;es;fr</AppxDefaultResourceQualifiers>