Creare e convertire un mapping del gruppo di contenuti di origineCreate and convert a source content group map

Per preparare l'app per l'installazione in streaming, è necessario creare una mappa del gruppo di contenuti.To get your app ready for streaming install, you'll need to create a content group map. Questo articolo illustra le specifiche della creazione e della conversione di una mappa del gruppo di contenuti e offre suggerimenti e trucchi lungo il percorso.This article will help you with the specifics of creating and converting a content group map while providing some tips and tricks along the way.

Creazione della mappa del gruppo di contenuto di origineCreating the source content group map

È necessario creare un SourceAppxContentGroupMap.xml file e quindi usare Visual Studio o lo strumento MakeAppx.exe per convertire il file nella versione finale: AppxContentGroupMap.xml .You'll need to create a SourceAppxContentGroupMap.xml file, and then either use Visual Studio or the MakeAppx.exe tool to convert this file to the final version: AppxContentGroupMap.xml. È possibile ignorare un passaggio creando il AppxContentGroupMap.xml da zero, ma è consigliabile, e in genere più semplice, creare il SourceAppxContentGroupMap.xml e convertirlo, perché i caratteri jolly non sono consentiti in AppxContentGroupMap.xml e sono molto utili.It's possible to skip a step by creating the AppxContentGroupMap.xml from scratch, but it's recommended (and generally easier) to create the SourceAppxContentGroupMap.xml and convert it, since wildcards are not allowed in the AppxContentGroupMap.xml (and they're really helpful).

Verrà ora illustrato un semplice scenario in cui l'installazione del flusso di app è vantaggiosa.Let's walk through a simple scenario where app streaming install is beneficial.

Supponiamo di aver creato un gioco, ma la dimensione dell'app finale è superiore a 100 GB.Say you've created a game, but the size of your final app is over 100 GB. Questa operazione richiederà molto tempo per il download dal Microsoft Store, operazione che può risultare poco pratica.That's going to take a long time to download from the Microsoft Store, which can be inconvenient. Se si sceglie di usare l'installazione di streaming app, è possibile specificare l'ordine in cui vengono scaricati i file dell'app.If you choose to use app streaming install, you can specify the order in which your app's files are downloaded. Indicando al negozio di scaricare prima i file essenziali, l'utente potrà interagire prima con l'app, mentre altri file non essenziali vengono scaricati in background.By telling the Store to download essential files first, the user will be able to engage with your app sooner while other non-essential files are downloaded in the background.

Nota

L'uso dell'installazione di streaming di app si basa molto sull'organizzazione di file dell'app.Using app streaming install heavily relies on your app's file organization. È consigliabile considerare il layout del contenuto dell'app per quanto riguarda l'installazione del flusso di app appena possibile, per rendere più semplice segmentare i file dell'app.It's recommended that you think about your app's content layout with respect to app streaming install as soon as possible to make segmenting your app's files simpler.

In primo luogo, verrà creato un SourceAppxContentGroupMap.xml file.First, we'll create a SourceAppxContentGroupMap.xml file.

Prima di entrare nei dettagli, di seguito è riportato un esempio di file semplice e completo SourceAppxContentGroupMap.xml :Before we get in to the details, here's an example of a simple, complete SourceAppxContentGroupMap.xml file:

<?xml version="1.0" encoding="utf-8"?>  
<ContentGroupMap xmlns="http://schemas.microsoft.com/appx/2016/sourcecontentgroupmap" 
                 xmlns:s="http://schemas.microsoft.com/appx/2016/sourcecontentgroupmap"> 
    <Required>
        <ContentGroup Name="Required">
            <File Name="StreamingTestApp.exe"/>
        </ContentGroup>
    </Required>
    <Automatic>
        <ContentGroup Name="Level2">
            <File Name="Assets\Level2\*"/>
        </ContentGroup>
        <ContentGroup Name="Level3">
            <File Name="Assets\Level3\*"/>
        </ContentGroup>
    </Automatic>
</ContentGroupMap>

Per una mappa del gruppo di contenuto sono presenti due componenti principali: la sezione obbligatoria , che contiene il gruppo di contenuto richiesto, e la sezione automatica , che può contenere più gruppi di contenuto automatici.There are two main components to a content group map: the required section, which contains the required content group, and the automatic section, which can contain multiple automatic content groups.

Gruppo di contenuto obbligatorioRequired content group

Il gruppo di contenuto richiesto è un singolo gruppo di contenuto all'interno dell' <Required> elemento di SourceAppxContentGroupMap.xml .The required content group is a single content group within the <Required> element of the SourceAppxContentGroupMap.xml. Un gruppo di contenuto necessario deve contenere tutti i file essenziali necessari per avviare l'app con l'esperienza utente minima.A required content group should contain all of the essential files necessary to launch the app with the minimal user experience. A causa di .NET Native compilazione, tutto il codice (l'eseguibile dell'applicazione) deve far parte del gruppo richiesto, lasciando asset e altri file per i gruppi automatici.Due to .NET Native compilation, all code (the application executable) must be part of the required group, leaving assets and other files for the automatic groups.

Ad esempio, se l'app è un gioco, il gruppo richiesto può includere i file usati nel menu principale o nella schermata iniziale del gioco.For example, if your app is a game, the required group may include files used in the main menu or game home screen.

Ecco il frammento di codice del SourceAppxContentGroupMap.xml file di esempio originale:Here's the snippet from our original SourceAppxContentGroupMap.xml example file:

<Required>
    <ContentGroup Name="Required">
        <File Name="StreamingTestApp.exe"/>
    </ContentGroup>
</Required>

Ecco alcuni aspetti importanti da notare:There are a few important things to notice here:

  • L'oggetto <ContentGroup> all'interno dell' <Required> elemento deve essere denominato "required".The <ContentGroup> within the <Required> element must be named "Required." Questo nome è riservato solo per il gruppo di contenuto richiesto e non può essere usato con altri <ContentGroup> nella mappa del gruppo di contenuto finale.This name is reserved for the required content group only, and cannot be used with any other <ContentGroup> in the final content group map.
  • Ne esiste solo una <ContentGroup> .There's only one <ContentGroup>. Questo comportamento è intenzionale, dal momento che dovrebbe essere presente un solo gruppo di file essenziali.This is intentional, since there should be only one group of essential files.
  • Il file in questo esempio è un singolo .exe file.The file in this example is a single .exe file. Un gruppo di contenuto obbligatorio non è limitato a un file. è possibile che esistano diversi.A required content group isn't restricted to one file, there can be several.

Un modo semplice per iniziare a scrivere questo file consiste nell'aprire una nuova pagina nell'editor di testo preferito, eseguire una rapida "Salva con nome" del file nella cartella del progetto dell'app e denominare il file appena creato: SourceAppxContentGroupMap.xml .An easy way to get started writing this file is to open up a new page in your favorite text editor, do a quick "Save As" of your file to your app's project folder, and name your newly created file: SourceAppxContentGroupMap.xml.

Importante

Se si sta sviluppando un'app C++, sarà necessario modificare le proprietà del file SourceAppxContentGroupMap.xml .If you are developing a C++ app, you will need to adjust the file properties of your SourceAppxContentGroupMap.xml. Impostare la Content proprietà su true e la File Type proprietà su file XML.Set the Content property to true and the File Type property to XML File.

Quando si crea SourceAppxContentGroupMap.xml , è utile usare i caratteri jolly nei nomi di file. per ulteriori informazioni, vedere la sezione suggerimenti e consigli per l'uso di caratteri jolly .When you're creating the SourceAppxContentGroupMap.xml, it's helpful to take advantage of using wildcards in file names, for more info, see the Tips and tricks for using wildcards section.

Se l'app è stata sviluppata con Visual Studio, è consigliabile includerla nel gruppo di contenuto necessario:If you developed your app using Visual Studio, it's recommended that you include this in your required content group:

<File Name="*"/>
<File Name="WinMetadata\*"/>
<File Name="Properties\*"/>
<File Name="Assets\*Logo*"/>
<File Name="Assets\*SplashScreen*"/>

L'aggiunta del nome del file con carattere jolly singolo includerà i file aggiunti alla directory del progetto da Visual Studio, ad esempio l'eseguibile dell'app o le dll.Adding the single wildcard file name will include files added to the project directory from Visual Studio, such as the app executable or DLLs. Le cartelle WinMetadata e Properties includono le altre cartelle generate da Visual Studio.The WinMetadata and Properties folders are to include the other folders Visual Studio generates. I caratteri jolly degli asset consentono di selezionare il logo e le immagini SplashScreen necessari per l'installazione dell'app.The Assets wildcards are to select the Logo and SplashScreen images that are necessary for the app to be installed.

Si noti che non è possibile utilizzare il carattere jolly doppio, "* *", alla radice della struttura dei file per includere tutti i file del progetto, poiché ciò non riuscirà quando si tenta di eseguire la conversione SourceAppxContentGroupMap.xml alla fine AppxContentGroupMap.xml .Note that you cannot use the double wild card, "**", at the root of the file structure to include every file in the project since this will fail when attempting to convert SourceAppxContentGroupMap.xml to the final AppxContentGroupMap.xml.

È anche importante notare che i file footprint (AppxManifest.xml, AppxSignature. p7x, resources. pri e così via) non devono essere inclusi nella mappa del gruppo di contenuti.It's also important to note that footprint files (AppxManifest.xml, AppxSignature.p7x, resources.pri, etc.) should not be included in the content group map. Se i file footprint sono inclusi in uno dei nomi di file con caratteri jolly specificati, verranno ignorati.If footprint files are included within one of the wildcard file names you specify, they will be ignored.

Gruppi di contenuto automaticiAutomatic content groups

I gruppi di contenuto automatici sono gli asset che vengono scaricati in background mentre l'utente interagisce con i gruppi di contenuto già scaricati.Automatic content groups are the assets that are downloaded in the background while the user is interacting with the already downloaded content groups. Questi contengono file aggiuntivi che non sono essenziali per l'avvio dell'app.These contain any additional files that are not essential to launching the app. È ad esempio possibile suddividere i gruppi di contenuto automatici in a livelli diversi, definendo ogni livello come gruppo di contenuto separato.For example, you could break up automatic content groups in to different levels, defining each level as a separate content group. Come indicato nella sezione del gruppo di contenuto richiesta: a causa di .NET Native compilazione, tutto il codice (l'eseguibile dell'applicazione) deve far parte del gruppo richiesto, lasciando asset e altri file per i gruppi automatici.As noted in the required content group section: due to .NET Native compilation, all code (the application executable) must be part of the required group, leaving assets and other files for the automatic groups.

Esaminiamo in dettaglio il gruppo di contenuto automatico dell' SourceAppxContentGroupMap.xml esempio:Let's take a closer look at the automatic content group from our SourceAppxContentGroupMap.xml example:

<Automatic>
    <ContentGroup Name="Level2">
        <File Name="Assets\Level2\*"/>
    </ContentGroup>
    <ContentGroup Name="Level3">
        <File Name="Assets\Level3\*"/>
    </ContentGroup>
</Automatic>

Il layout del gruppo automatico è piuttosto simile al gruppo richiesto, con alcune eccezioni:The layout of the automatic group is pretty similar to the required group, with a few exceptions:

  • Sono presenti più gruppi di contenuto.There are multiple content groups.
  • I gruppi di contenuto automatici possono avere nomi univoci tranne il nome "required", che è riservato per il gruppo di contenuto richiesto.Automatic content groups can have unique names except for the name "Required" which is reserved for the required content group.
  • I gruppi di contenuto automatici non possono contenere file del gruppo di contenuto richiesto.Automatic content groups cannot contain any files from the required content group.
  • Un gruppo di contenuto automatico può contenere file che si trovano anche in altri gruppi di contenuto automatici.An automatic content group can contain files that are also in other automatic content groups. I file verranno scaricati una sola volta e verranno scaricati con il primo gruppo di contenuto automatico che li contiene.The files will be downloaded only once, and will be downloaded with the first automatic content group that contains them.

Suggerimenti e consigli per l'uso di caratteri jollyTips and tricks for using wildcards

Il layout del file per le mappe del gruppo di contenuto è sempre relativo alla cartella radice del progetto.The file layout for content group maps is always relative to your project root folder.

In questo esempio, i caratteri jolly vengono usati all'interno <ContentGroup> di entrambi gli elementi per recuperare tutti i file all'interno di un livello di file "Assets\Level2" o "Assets\Level3."In our example, wildcards are used within both <ContentGroup> elements to retrieve all files within one file level of "Assets\Level2" or "Assets\Level3." Se si usa una struttura di cartelle più approfondita, è possibile usare il carattere jolly doppio:If you're using a deeper folder structure, you can use the double wildcard:

<ContentGroup Name="Level2">
    <File Name="Assets\Level2\**"/>
</ContentGroup>

È anche possibile usare caratteri jolly con testo per i nomi di file.You can also use wildcards with text for file names. Se ad esempio si vuole includere tutti i file nella cartella "assets" con un nome file che contiene "Level2", è possibile usare un valore simile al seguente:For example, if you want to include every file in your "Assets" folder with a file name that contains "Level2" you can use something like this:

<ContentGroup Name="Level2">
    <File Name="Assets\*Level2*"/>
</ContentGroup>

Converti SourceAppxContentGroupMap.xml in AppxContentGroupMap.xmlConvert SourceAppxContentGroupMap.xml to AppxContentGroupMap.xml

Per convertire la nella SourceAppxContentGroupMap.xml versione finale, AppxContentGroupMap.xml è possibile usare Visual Studio 2017 o lo strumento da riga di comando MakeAppx.exe .To convert the SourceAppxContentGroupMap.xml to the final version, AppxContentGroupMap.xml, you can use Visual Studio 2017 or the MakeAppx.exe command line tool.

Per usare Visual Studio per convertire la mappa del gruppo di contenuti:To use Visual Studio to convert your content group map:

  1. Aggiungere la SourceAppxContentGroupMap.xml alla cartella del progettoAdd the SourceAppxContentGroupMap.xml to your project folder
  2. Modificare l'azione di compilazione di SourceAppxContentGroupMap.xml in "AppxSourceContentGroupMap" nella finestra ProprietàChange the Build Action of the SourceAppxContentGroupMap.xmlto "AppxSourceContentGroupMap" in the Properties window
  3. Fare clic con il pulsante destro del mouse sul progetto in Esplora soluzioniRight click the project in the solution explorer
  4. Passare a Store-> convertire il file di mapping del gruppo di contenutiNavigate to Store -> Convert Content Group Map File

Se l'app non è stata sviluppata in Visual Studio o si preferisce semplicemente usare la riga di comando, usare lo strumento MakeAppx.exe per convertire il SourceAppxContentGroupMap.xml .If you didn't develop your app in Visual Studio, or if you just prefer using the command line, use the MakeAppx.exe tool to convert your SourceAppxContentGroupMap.xml.

Un semplice comando MakeAppx.exe potrebbe avere un aspetto simile al seguente:A simple MakeAppx.exe command might look something like this:

MakeAppx convertCGM /s MyApp\SourceAppxContentGroupMap.xml /f MyApp\AppxContentGroupMap.xml /d MyApp\

L'opzione/s specifica il percorso di SourceAppxContentGroupMap.xml e/f specifica il percorso dell'oggetto AppxContentGroupMap.xml .The /s option specifies the path to the SourceAppxContentGroupMap.xml, and /f specifies the path to the AppxContentGroupMap.xml. L'opzione finale,/d, specifica la directory da usare per l'espansione dei caratteri jolly del nome file, in questo caso la directory del progetto dell'app.The final option, /d, specifies which directory should be used for expanding file name wildcards, in this case, its the app project directory.

Per ulteriori informazioni sulle opzioni che è possibile utilizzare con MakeAppx.exe, aprire un prompt dei comandi, passare a MakeAppx.exe e immettere:For more information about options you can use with MakeAppx.exe, open a command prompt, navigate to MakeAppx.exe and enter:

MakeAppx convertCGM /?

Questo è tutto quello che ti serve per preparare la tua versione finale AppxContentGroupMap.xml per la tua app.That's all you'll need to get your final AppxContentGroupMap.xml ready for your app! È ancora più da fare prima che l'app sia pronta per la Microsoft Store.There's still more to do before your app is fully ready for the Microsoft Store. Per altre informazioni sul processo completo di aggiunta dell'installazione di streaming all'app, vedere questo post di Blog.For more information on the complete process of adding streaming install to your app, check out this blog post.