Fichier de configuration de MakePri.exe

Cette rubrique décrit le schéma du fichier de configuration XML MakePri.exe ; également appelé fichier de configuration PRI. L’outil MakePri.exe a une commande createconfig que vous pouvez utiliser pour créer un fichier de configuration PRI initialisé.

Notes

MakePri.exe est installé lorsque vous case activée l’option Kit de développement logiciel (SDK) Windows pour les applications gérées UWP lors de l’installation du Kit de développement logiciel Windows. Il est installé sur le chemin d’accès %WindowsSdkDir%bin\<WindowsTargetPlatformVersion>\x64\makepri.exe (ainsi que dans les dossiers nommés pour les autres architectures). Par exemple : C:\Program Files (x86)\Windows Kits\10\bin\10.0.17713.0\x64\makepri.exe.

Le fichier de configuration PRI contrôle les ressources qui sont indexées et comment. Le code XML de configuration doit être conforme au schéma suivant.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="resources">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="packaging" maxOccurs="1" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="autoResourcePackage" maxOccurs="unbounded" minOccurs="0">
                <xs:complexType>
                  <xs:attribute name="qualifier" type="xs:string" use="required" />
                </xs:complexType>
              </xs:element>
              <xs:element name="resourcePackage" maxOccurs="unbounded" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="qualifierSet" maxOccurs="unbounded" minOccurs="0">
                      <xs:complexType>
                        <xs:attribute name="definition" type="xs:string" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="name" type="xs:string" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element maxOccurs="unbounded" name="index">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="qualifiers" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element minOccurs="1" maxOccurs="unbounded" name="qualifier">
                      <xs:complexType>
                        <xs:attribute name="name" type="xs:string" use="required" />
                        <xs:attribute name="value" type="xs:string" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="default" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element minOccurs="1" maxOccurs="unbounded" name="qualifier">
                      <xs:complexType>
                        <xs:attribute name="name" type="xs:string" use="required" />
                        <xs:attribute name="value" type="xs:string" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="indexer-config" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
                  </xs:sequence>
                  <xs:attribute name="type" type="xs:string" use="required" />
                  <xs:anyAttribute processContents="skip"/>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="root" type="xs:string" use="required" />
            <xs:attribute name="startIndexAt" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="isDeploymentMergeable" type="xs:boolean" use="optional" />
      <xs:attribute name="majorVersion" type="xs:positiveInteger" use="optional" />
      <xs:attribute name="targetOsVersion" type="xs:string" use="optional" />
    </xs:complexType>
  </xs:element>
</xs:schema>
  • L’élément default spécifie le contexte (langage, échelle, contraste, etc.) qui doit être utilisé pour résoudre les ressources lorsque le contexte d’exécution ne correspond à aucune ressource candidate. Étant donné que ce contexte est spécifié au moment de la génération et ne change pas, les ressources sont résolues dans ce contexte à mesure que des qualificateurs sont créés. Le score correspondant est stocké au moment de la génération. Une valeur doit être spécifiée pour chaque qualificateur. Pour plus d’informations sur la façon dont les ressources sont choisies, consultez ResourceContext .
  • L’élément index définit des passes d’indexation discrètes effectuées sur les ressources. Chaque passe d’indexation détermine les indexeurs spécifiques au format à utiliser et les ressources à indexer.
  • L’élément qualifiers définit les qualificateurs initiaux pour le premier fichier ou dossier dont d’autres ressources héritent. Chaque élément qualificateur doit avoir un nom et une valeur valides (voir Personnaliser vos ressources pour la langue, l’échelle, le contraste élevé et d’autres qualificateurs).
  • L’attribut root est la racine du chemin d’accès du fichier physique pour la passe d’index. Il peut être relatif ou absolu. Si elle est relative, elle est ajoutée à la racine du projet que vous fournissez dans la ligne de commande. S’il est absolu, il est directement utilisé comme racine de passage d’index. Les barres obliques vers l’arrière ou vers l’avant sont acceptables. Les barres obliques de fin sont coupées. La racine de la passe d’index détermine le dossier dans lequel toutes les ressources sont considérées comme relatives.
  • L’attribut startIndexAt est le fichier initial ou le dossier initial utilisé dans l’indexation. Il est relatif à la racine de la passe d’index. Une valeur vide suppose que l’index passe le dossier racine.

Fichier de configuration PRI par défaut

MakePri.exe génère ce nouveau fichier de configuration PRI initialisé lors de l’émission de la commande createconfig .

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<resources targetOsVersion="10.0.0" majorVersion="1">
  <packaging>
    <autoResourcePackage qualifier="Language"/>
    <autoResourcePackage qualifier="Scale"/>
    <autoResourcePackage qualifier="DXFeatureLevel"/>
  </packaging>
  <index root="\" startIndexAt="\">
    <default>
      <qualifier name="Language" value="en-US"/>
      <qualifier name="Contrast" value="standard"/>
      <qualifier name="Scale" value="100"/>
      <qualifier name="HomeRegion" value="001"/>
      <qualifier name="TargetSize" value="256"/>
      <qualifier name="LayoutDirection" value="LTR"/>
      <qualifier name="Theme" value="dark"/>
      <qualifier name="AlternateForm" value=""/>
      <qualifier name="DXFeatureLevel" value="DX9"/>
      <qualifier name="Configuration" value=""/>
      <qualifier name="DeviceFamily" value="Universal"/>
      <qualifier name="Custom" value=""/>
    </default>
    <indexer-config type="folder" foldernameAsQualifier="true" filenameAsQualifier="true" qualifierDelimiter="."/>
    <indexer-config type="resw" convertDotsToSlashes="true" initialPath=""/>
    <indexer-config type="resjson" initialPath=""/>
    <indexer-config type="PRI"/>
  </index>
  <!--<index startIndexAt="Start Index Here" root="Root Here">-->
  <!--        <indexer-config type="resfiles" qualifierDelimiter="."/>-->
  <!--        <indexer-config type="priinfo" emitStrings="true" emitPaths="true" emitEmbeddedData="true"/>-->
  <!--</index>-->
</resources>

Élément Packaging

L’élément packaging définit les informations de fractionnement PRI. Le schéma de l’élément est défini pour la packaging configuration automatique (prise en charge d’une autoResourcePackage dimension spécifique) et manuelle.

Cet exemple montre comment utiliser autoResourcePackage le long d’une dimension spécifique.

	<packaging>
		<autoResourcePackage qualifier="Language"/>
		<autoResourcePackage qualifier="Scale"/>
		<autoResourcePackage qualifier="DXFeatureLevel"/>
	</packaging>

Cet exemple montre comment utiliser manuellement resourcePackage.

  <packaging>
    <resourcePackage name="Germany">
      <qualifierSet definition="lang-de-de"/>
      <qualifierSet definition="lang-es-es"/>
    </resourcePackage>  
    <resourcePackage name="France">
      <qualifierSet definition="lang-fr-fr"/>
    </resourcePackage>  
    <resourcePackage name="HighRes1">
      <qualifierSet definition="scale-200"/>
    </resourcePackage>
    <resourcePackage name="HighRes2">
      <qualifierSet definition="scale-400"/>
    </resourcePackage>
  </packaging>

MakePri.exe ne bloque pas explicitement la génération de fichiers PRI de ressources le long d’une dimension spécifique. Les restrictions sur un certain ensemble de dimensions sont définies et implémentées en externe par MakeAppx.exe ou d’autres outils dans le pipeline.

MakePri.exe analyse l’élément packaging après tous les index nœuds pour remplir tous les qualificateurs par défaut. MakePri.exe collecte des informations analysées dans ces structures de données.

enum ResourcePackageMode
{
    None,
    AutoPackQualifier,
    ManualPack
}

ResourcePackageMode eResourcePackageMode;
list<string> RPQualifierList; // To store AutoResourcePackage Qualifiers
map<string, list<string>> RPNameToQSIMap; // To store ResourcePackage name to QualifierSet list mapping.

attribut resources@isDeploymentMergeable

Cet attribut définit un indicateur dans le fichier PRI qui provoque

  • Fusion de déploiement pour identifier que ce fichier PRI peut fusionner.
  • GetFullyQualifiedReference pour retourner une erreur au cas où cet indicateur est défini et que le gestionnaire de ressources a été initialisé avec un fichier.

La valeur par défaut de cet attribut est true. MakePri.exe définit l’indicateur dans PRI uniquement si vous ciblez Windows 10.

Nous vous recommandons d’omettre isDeploymentMergeable (ou de le définir explicitement sur true) pour la création de packs de ressources si vous ciblez Windows 10.

MakePri.exe ajoute la valeur de au fichier de isDeploymentMergeable vidage si makepri dump est exécuté avec l’option /dt detailed .

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PriInfo>
	<PriHeader>
		...
		<IsDeploymentMergeable>true</IsDeploymentMergeable>
		...
	</PriHeader>
  ...
</PriInfo>

attribut resources@majorVersion

La valeur par défaut de cet attribut est 1. Si vous fournissez une valeur explicite et que vous utilisez également l’option de ligne de commande déconseillée /VersionMajor(vma) pour l’outil MakePri.exe, la valeur dans le fichier de configuration est prioritaire.

Voici un exemple.

<resources majorVersion="2">
  <packaging ... />
  <index root="\" startIndexAt="\">
    ...
  </index>
</resources>

attribut resources@targetOsVersion

Indique la version du système d’exploitation cible. Le tableau ci-dessous montre les valeurs prises en charge ; la valeur par défaut est 6.3.0.

Valeur Signification
10.0.0 Windows 10
6.3.0 (par défaut) Windows 8.1
6.2.1 Windows 8

Voici un exemple.

<resources targetOsVersion="10.0.0">
  <packaging ... />
  <index root="\" startIndexAt="\">
    ...
  </index>
</resources>

Note Windows est à compatibilité descendante par rapport aux fichiers PRI ; mais pas toujours compatible avec l’avant.

MakePri.exe ajoute la valeur de au fichier de targetOsVersion vidage si makepri dump est exécuté avec l’option /dt detailed .

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PriInfo>
	<PriHeader>
		...
		<TargetOS version="10.0.0"/>
		...
	</PriHeader>
  ...
</PriInfo>

Messages d’erreur de validation

Voici quelques exemples de conditions d’erreur et le message d’erreur correspondant.

Condition severity Message
Une valeur targetOsVersion autre que l’une des valeurs prises en charge est spécifiée. Erreur Configuration non valide : targetOsVersion spécifié non valide.
Une targetOsVersion de « 6.2.1 » est spécifiée et un packaging élément est présent. Erreur Configuration non valide : le nœud « Empaquetage » n’est pas pris en charge avec cette targetOsVersion.
Plusieurs modes trouvés dans la configuration. Par exemple, Manual et AutoResourcePackage spécifiés. Erreur Configuration non valide : le nœud « empaquetage » ne peut pas avoir plusieurs modes de fonctionnement.
Un qualificateur par défaut est répertorié sous package de ressources. Erreur Configuration non valide : <Qualifiername>=<QualifierValue> est un qualificateur par défaut et ses candidats ne peuvent pas être ajoutés à un package de ressources.
Le qualificateur AutoResourcePackage contient plusieurs qualificateurs. Par exemple, language_scale. Erreur Configuration non valide : AutoResourcePackage avec plusieurs qualificateurs n’est pas pris en charge.
ResourcePackage QualifierSet contient plusieurs qualificateurs. Par exemple, language-en-us_scale-100 Erreur Configuration non valide : QualifierSet avec plusieurs qualificateurs n’est pas pris en charge.
Nom du fichier resourcepack en double trouvé. Erreur Configuration non valide : nom rpname du <pack de ressources en double>.
Même jeu de qualificateurs défini dans deux packages de ressources. Erreur Configuration non valide : plusieurs instances de «< balises> qualificateur » de QualifierSet ont trouvées.
Aucun candidat n’est trouvé pour le QualifierSet répertorié pour le nœud « ResourcePackage ». Avertissement Configuration non valide : aucun candidat n’a été trouvé pour <le nom> du package de ressources.
Aucun candidat n’a trouvé pour qualificateur répertorié sous le nœud « AutoResourcePackage ». Avertissement Configuration non valide : aucun candidat n’a été trouvé pour le nom> du qualificateur<. Package de ressources non généré.
Aucun des modes n’est trouvé. Autrement dit, nœud « empaquetage » vide trouvé. Avertissement Configuration non valide : aucun mode d’empaquetage spécifié.