Fichier de configuration 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é.

Remarque

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 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 à aucun candidat à la ressource. É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. Chaque qualificateur doit avoir une valeur spécifiée. 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 que d’autres ressources héritent. Chaque élément de qualificateur doit avoir un nom et une valeur valides (consultez 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. Si elle est absolue, elle est directement utilisée comme racine de passe d’index. Les barres obliques inverses ou avant sont acceptables. Les barres obliques de fin sont coupées. La racine de la passe d’index détermine le dossier auquel toutes les ressources sont considérées comme relatives.
  • L’attribut startIndexAt est le fichier ou dossier initial d’amorçage utilisé dans l’indexation. Il est relatif à la racine de passe d’index. Une valeur vide suppose que le dossier racine de l’index passe.

Fichier de configuration PRI par défaut

MakePri.exe génère ce nouveau fichier de configuration PRI initialisé lorsque la commande createconfig est émise.

<?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 d’empaquetage

L’élément packaging définit les informations de fractionnement PRI. Le schéma de l’élément packaging est défini pour la prise en charge automatique (prise en charge du autoResourcePackage long d’une dimension spécifique) et pour la configuration 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 le long d’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 si 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 uniquement l’indicateur dans PRI si vous ciblez Windows 10.

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

MakePri.exe ajoute la valeur du isDeploymentMergeable fichier de vidage si makepri dump elle est exécutée 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 du fichier config est prioritaire.

Voici un exemple.

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

attribut resources@targetOsVersion

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

Valeur Signification
10.0.0 Windows 10
6.3.0 (valeur 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>

Notez que Windows est rétrocompatible par rapport aux fichiers PRI ; mais pas toujours compatible avec les versions antérieures.

MakePri.exe ajoute la valeur du targetOsVersion fichier de vidage si makepri dump elle est exécutée 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 Niveau de gravité Message
Une version targetOsVersion autre que l’une des valeurs prises en charge est spécifiée. Error Configuration non valide : TargetOsVersion non valide spécifié.
Une targetOsVersion de « 6.2.1 » est spécifiée et un packaging élément est présent. Error 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 and AutoResourcePackage spécifié. Error Configuration non valide : le nœud « empaquetage » ne peut pas avoir plusieurs modes d’opération.
Un qualificateur par défaut est répertorié sous le package de ressources. Error 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. Error 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 Error Configuration non valide : QualifierSet avec plusieurs qualificateurs n’est pas pris en charge.
Nom resourcepack dupliqué trouvé. Error Configuration non valide : nom rpname> du nom <du pack de ressources en double.
Même jeu de qualificateurs défini dans deux packages de ressources. Error Configuration non valide : plusieurs instances de QualifierSet «< balises de qualificateur » trouvées>.
Aucun candidat n’est trouvé pour le QualificateurSet répertorié pour le nœud « ResourcePackage ». Avertissement Configuration non valide : Aucun candidat trouvé pour <le nom> du package de ressources.
Aucun candidat trouvé pour le qualificateur répertorié sous le nœud « AutoResourcePackage ». Avertissement Configuration non valide : aucun candidat trouvé pour le nom> du qualificateur de qualificateur<. Package de ressources non généré.
Aucun des modes n’est trouvé. Autrement dit, nœud « packaging » vide trouvé. Avertissement Configuration non valide : aucun mode d’empaquetage spécifié.