Creare risorse nel pacchetto dell'app invece che nel pacchetto di risorse

Alcuni tipi di app (dizionari multilingue, strumenti di traduzione e così via) devono sostituire il comportamento predefinito di un bundle dell'app e creare risorse nel pacchetto di app invece che in pacchetti di risorse separati (o pacchetti di risorse). Questo argomento spiega come fare.

Per impostazione predefinita, quando si compila un bundle di app (con estensione appxbundle), nel pacchetto dell'app vengono integrate solo le risorse predefinite per il linguaggio, la scalabilità e il livello di funzionalità DirectX. Le risorse tradotte, e le risorse personalizzate per le scale non predefinite e/o i livelli di funzionalità DirectX, sono integrate in pacchetti di risorse e vengono scaricate solo nei dispositivi che ne hanno bisogno. Se un cliente acquista l'app da Microsoft Store usando un dispositivo con una preferenza di lingua impostata su Spagnolo, viene scaricata e installata solo l'app più il pacchetto di risorse spagnolo. Se lo stesso utente cambia successivamente la preferenza per la lingua in francese in Impostazioni, il pacchetto di risorse francese dell'app viene scaricato e installato. Cose simili si verificano con le risorse qualificate per la scalabilità e per il livello di funzionalità DirectX. Per la maggior parte delle app, questo comportamento costituisce un'efficienza preziosa ed è ciò che l'utente e il cliente vogliono accadere.

Tuttavia, se l'app consente all'utente di modificare la lingua in tempo reale dall'interno dell'app (anziché tramite Impostazioni), il comportamento predefinito non è appropriato. In realtà si vuole che tutte le risorse linguistiche vengano scaricate e installate in modo incondizionato insieme all'app una sola volta e quindi rimangano nel dispositivo. Si vuole compilare tutte queste risorse nel pacchetto dell'app anziché in pacchetti di risorse separati.

Nota L'inclusione di risorse in un pacchetto dell'app aumenta essenzialmente le dimensioni dell'app. Ecco perché vale la pena fare solo se la natura dell'app lo richiede. In caso contrario, non è necessario eseguire alcuna operazione ad eccezione della compilazione di un bundle di app normale come di consueto.

È possibile configurare Visual Studio per compilare le risorse nel pacchetto dell'app in due modi. È possibile aggiungere un file di configurazione al progetto oppure modificare direttamente il file di progetto. Usare qualsiasi opzione con cui si è più a proprio agio o che funzioni meglio con il sistema di compilazione.

Opzione 1. Usare priconfig.packaging.xml per creare risorse nel pacchetto dell'app

  1. In Visual Studio aggiungere un nuovo elemento al progetto. Scegliere File XML e assegnare al file priconfig.packaging.xmlil nome.
  2. In Esplora soluzioni selezionare priconfig.packaging.xml e controllare il Finestra Proprietà. L'azione di compilazione del file deve essere impostata su Nessuno e copiare nella directory di output deve essere impostata su Non copiare.
  3. Sostituire il contenuto del file con il codice XML seguente:
    <packaging>
       <autoResourcePackage qualifier="Language" />
       <autoResourcePackage qualifier="Scale" />
       <autoResourcePackage qualifier="DXFeatureLevel" />
    </packaging>
    
  4. Ogni <autoResourcePackage> elemento indica a Visual Studio di suddividere automaticamente le risorse per il nome qualificatore specificato in pacchetti di risorse separati. Questa operazione è denominata suddivisione automatica. Con il contenuto del file finora non è stato modificato il comportamento di Visual Studio. In altre parole, Visual Studio si comportava già come se il file fosse presente con questi contenuti perché si tratta dei valori predefiniti. Se non si vuole che Visual Studio si divida automaticamente in un nome qualificatore, eliminare tale <autoResourcePackage> elemento dal file. Ecco come dovrebbe apparire il file se vuoi che tutte le risorse linguistiche siano incorporate nel pacchetto dell'app invece di essere suddivise automaticamente in pacchetti di risorse separati.
    <packaging>
       <autoResourcePackage qualifier="Scale" />
       <autoResourcePackage qualifier="DXFeatureLevel" />
    </packaging>
    
  5. Salva e chiudi il file e ricostruisci il tuo progetto.

Per verificare che vengano prese in considerazione le scelte di suddivisione automatica, cercare il file <ProjectFolder>\obj\<ReleaseConfiguration folder>\split.priconfig.xml e verificare che il contenuto corrisponda alle scelte effettuate. In tal caso, Visual Studio è stato configurato correttamente per compilare le risorse desiderate nel pacchetto dell'app.

È necessario eseguire un passaggio finale. Ma solo se è stato eliminato il Language nome del qualificatore. Devi specificare l'unione di tutte le lingue supportate dell'app come lingua predefinita dell'app. Per ulteriori dettagli, vedere Specificare le risorse predefinite usate dall'app. Questo è ciò che priconfig.default.xml contiene se si includessero risorse per inglese, spagnolo e francese nel pacchetto dell'app.

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

Come funziona?

Dietro le quinte, Visual Studio avvia uno strumento denominato MakePri.exe per generare un file noto come indice delle risorse del pacchetto, che descrive tutte le risorse dell'app, incluso l'indicazione dei nomi dei qualificatori di risorsa da dividere automaticamente. Per informazioni dettagliate su questo strumento, vedere Compilare manualmente le risorse con MakePri.exe. Visual Studio passa un file di configurazione a MakePri.exe. Il contenuto del priconfig.packaging.xml file viene usato come <packaging> elemento del file di configurazione, ovvero la parte che determina la suddivisione automatica. L'aggiunta e la modifica priconfig.packaging.xml influisce quindi sul contenuto del file package resource index generato da Visual Studio per l'app, nonché sul contenuto dei pacchetti nel bundle dell'app.

Uso di un nome di file diverso da priconfig.packaging.xml

Se si assegna un nome al file priconfig.packaging.xml, Visual Studio lo riconoscerà e lo userà automaticamente. Se si assegna un nome diverso, sarà necessario comunicare a Visual Studio. Nel file di progetto, tra i tag di apertura e chiusura del primo <PropertyGroup> elemento, aggiungere il codice XML.

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

Sostituisci FILE-PATH-AND-NAME con il percorso e il nome del file.

Opzione 2. Usare il file di progetto per compilare le risorse nel pacchetto dell'app

Questa è un'alternativa all'opzione 1. Dopo aver compreso il funzionamento dell'opzione 1, è possibile scegliere di fare l'opzione 2 se si adatta allo sviluppo e/o al flusso di lavoro di compilazione migliore.

Nel file di progetto, tra i tag di apertura e chiusura del primo <PropertyGroup> elemento, aggiungere il codice XML.

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

Ecco come eseguire questa operazione dopo aver eliminato il primo nome qualificatore.

<AppxBundleAutoResourcePackageQualifiers>Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers>

Salvare e chiudere e ricompilare il progetto.

È necessario eseguire un passaggio finale. Ma solo se è stato eliminato il Language nome del qualificatore. Devi specificare l'unione di tutte le lingue supportate dell'app come lingua predefinita dell'app. Per ulteriori dettagli, vedere Specificare le risorse predefinite usate dall'app. Questo è ciò che il progetto conterrebbe se si includessero risorse per inglese, spagnolo e francese nel pacchetto dell'app.

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