Crear y convertir una asignación de grupo de contenido de origenCreate and convert a source content group map

Para preparar la aplicación para la instalación de streaming, deberá crear una asignación de grupo de contenido.To get your app ready for streaming install, you'll need to create a content group map. Este artículo le ayudará con los detalles de la creación y conversión de un mapa de grupo de contenido, a la vez que proporciona algunas sugerencias y trucos a lo largo del proceso.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.

Crear la asignación de grupo de contenido de origenCreating the source content group map

Deberá crear un SourceAppxContentGroupMap.xml archivo y, a continuación, usar Visual Studio o la herramienta MakeAppx.exe para convertir este archivo en la versión final: 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. Es posible omitir un paso creando AppxContentGroupMap.xml desde cero, pero se recomienda (y, por lo general, más fácil) para crear SourceAppxContentGroupMap.xml y convertirlo, ya que los caracteres comodín no están permitidos en el AppxContentGroupMap.xml (y son realmente útiles).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).

Vamos a examinar un escenario sencillo en el que la instalación de streaming de aplicaciones es beneficiosa.Let's walk through a simple scenario where app streaming install is beneficial.

Imagine que ha creado un juego, pero el tamaño de la aplicación final es superior a 100 GB.Say you've created a game, but the size of your final app is over 100 GB. Esto va a tardar mucho tiempo en descargarse desde el Microsoft Store, lo que puede resultar poco práctico.That's going to take a long time to download from the Microsoft Store, which can be inconvenient. Si decide usar la instalación de streaming de aplicaciones, puede especificar el orden en el que se descargan los archivos de la aplicación.If you choose to use app streaming install, you can specify the order in which your app's files are downloaded. Al indicar al almacén que descargue primero los archivos esenciales, el usuario podrá interactuar con la aplicación antes de que otros archivos no esenciales se descarguen en segundo plano.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

El uso de la instalación de streaming de aplicaciones se basa en gran medida en la organización de archivos de la aplicación.Using app streaming install heavily relies on your app's file organization. Se recomienda pensar en el diseño de contenido de la aplicación con respecto a la instalación de streaming de aplicaciones lo antes posible para que la segmentación de los archivos de la aplicación sea más sencilla.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.

En primer lugar, vamos a crear un SourceAppxContentGroupMap.xml archivo.First, we'll create a SourceAppxContentGroupMap.xml file.

Antes de entrar en los detalles, este es un ejemplo de un archivo sencillo y 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>

Hay dos componentes principales en una asignación de grupo de contenido: la sección necesaria , que contiene el grupo de contenido necesario, y la sección automática , que puede contener varios grupos de contenido automáticos.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.

Grupo de contenido necesarioRequired content group

El grupo de contenido requerido es un grupo de contenido único dentro del <Required> elemento de SourceAppxContentGroupMap.xml .The required content group is a single content group within the <Required> element of the SourceAppxContentGroupMap.xml. Un grupo de contenido necesario debe contener todos los archivos esenciales necesarios para iniciar la aplicación con la experiencia mínima del usuario.A required content group should contain all of the essential files necessary to launch the app with the minimal user experience. Debido a la compilación de .NET Native, todo el código (el archivo ejecutable de la aplicación) debe formar parte del grupo requerido, lo que mantiene los recursos y otros archivos para los grupos automáticos.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.

Por ejemplo, si la aplicación es un juego, el grupo requerido puede incluir archivos usados en el menú principal o en la pantalla principal del juego.For example, if your app is a game, the required group may include files used in the main menu or game home screen.

Este es el fragmento de código del SourceAppxContentGroupMap.xml archivo de ejemplo original:Here's the snippet from our original SourceAppxContentGroupMap.xml example file:

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

Hay algunos aspectos importantes que se deben tener en cuenta aquí:There are a few important things to notice here:

  • <ContentGroup>En el <Required> elemento, se debe denominar "Required".The <ContentGroup> within the <Required> element must be named "Required." Este nombre está reservado solo para el grupo de contenido necesario y no se puede usar con ningún otro <ContentGroup> en el mapa del grupo de contenido final.This name is reserved for the required content group only, and cannot be used with any other <ContentGroup> in the final content group map.
  • Solo hay una <ContentGroup> .There's only one <ContentGroup>. Esto es intencionado, ya que solo debe haber un grupo de archivos esenciales.This is intentional, since there should be only one group of essential files.
  • El archivo de este ejemplo es un único .exe archivo.The file in this example is a single .exe file. Un grupo de contenido necesario no está restringido a un archivo, puede haber varios.A required content group isn't restricted to one file, there can be several.

Una manera fácil de empezar a escribir este archivo es abrir una nueva página en su editor de texto favorito, realizar una "guardar como" rápida del archivo en la carpeta de proyecto de la aplicación y asignar un nombre al archivo recién creado: 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

Si está desarrollando una aplicación de C++, tendrá que ajustar las propiedades de archivo de su SourceAppxContentGroupMap.xml .If you are developing a C++ app, you will need to adjust the file properties of your SourceAppxContentGroupMap.xml. Establezca la Content propiedad en true y la File Type propiedad en el archivo XML.Set the Content property to true and the File Type property to XML File.

Al crear el, resulta SourceAppxContentGroupMap.xml útil aprovechar el uso de caracteres comodín en los nombres de archivo. para obtener más información, consulte la sección sugerencias y trucos para usar caracteres comodín .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.

Si ha desarrollado su aplicación con Visual Studio, se recomienda que la incluya en el grupo de contenido necesario: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*"/>

Agregar el nombre de archivo comodín único incluirá los archivos agregados al directorio del proyecto desde Visual Studio, como el ejecutable de la aplicación o los archivos 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. Las carpetas WinMetadata y Properties van a incluir las otras carpetas que genera Visual Studio.The WinMetadata and Properties folders are to include the other folders Visual Studio generates. Los caracteres comodín de activos son seleccionar las imágenes de logotipo y de SplashScreen que son necesarias para que se instale la aplicación.The Assets wildcards are to select the Logo and SplashScreen images that are necessary for the app to be installed.

Tenga en cuenta que no puede usar el carácter doble comodín, "* *", en la raíz de la estructura de archivos para incluir todos los archivos del proyecto, ya que se producirá un error al intentar realizar SourceAppxContentGroupMap.xml la conversión al final 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.

También es importante tener en cuenta que los archivos de superficie (AppxManifest.xml, AppxSignature. p7x, Resources. PRI, etc.) no deben incluirse en el mapa del grupo de contenido.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. Si los archivos de superficie se incluyen dentro de uno de los nombres de archivo comodín que especifique, se omitirán.If footprint files are included within one of the wildcard file names you specify, they will be ignored.

Grupos de contenido automáticosAutomatic content groups

Los grupos de contenido automático son los activos que se descargan en segundo plano mientras el usuario está interactuando con los grupos de contenido ya descargados.Automatic content groups are the assets that are downloaded in the background while the user is interacting with the already downloaded content groups. Contienen archivos adicionales que no son esenciales para iniciar la aplicación.These contain any additional files that are not essential to launching the app. Por ejemplo, podría dividir los grupos de contenido automático en distintos niveles, definiendo cada nivel como un grupo de contenido independiente.For example, you could break up automatic content groups in to different levels, defining each level as a separate content group. Como se indicó en la sección Grupo de contenido requerido: debido a .NET Native compilación, todo el código (el archivo ejecutable de la aplicación) debe formar parte del grupo requerido, lo que mantiene los recursos y otros archivos para los grupos automáticos.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.

Echemos un vistazo más de cerca al grupo de contenido automático de nuestro SourceAppxContentGroupMap.xml ejemplo: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>

El diseño del grupo automático es bastante similar al grupo requerido, con algunas excepciones:The layout of the automatic group is pretty similar to the required group, with a few exceptions:

  • Hay varios grupos de contenido.There are multiple content groups.
  • Los grupos de contenido automáticos pueden tener nombres únicos, excepto el nombre "Required", que está reservado para el grupo de contenido necesario.Automatic content groups can have unique names except for the name "Required" which is reserved for the required content group.
  • Los grupos de contenido automático no pueden contener archivos del grupo de contenido necesario.Automatic content groups cannot contain any files from the required content group.
  • Un grupo de contenido automático puede contener archivos que también están en otros grupos de contenido automáticos.An automatic content group can contain files that are also in other automatic content groups. Los archivos se descargarán una sola vez y se descargarán con el primer grupo de contenido automático que los contenga.The files will be downloaded only once, and will be downloaded with the first automatic content group that contains them.

Sugerencias y trucos para usar caracteres comodínTips and tricks for using wildcards

El diseño de archivo de las asignaciones de grupo de contenido siempre es relativo a la carpeta raíz del proyecto.The file layout for content group maps is always relative to your project root folder.

En nuestro ejemplo, se utilizan caracteres comodín en ambos <ContentGroup> elementos para recuperar todos los archivos dentro de un nivel de archivo "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." Si utiliza una estructura de carpetas más profunda, puede usar el carácter comodín doble:If you're using a deeper folder structure, you can use the double wildcard:

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

También puede usar caracteres comodín con texto para los nombres de archivo.You can also use wildcards with text for file names. Por ejemplo, si desea incluir todos los archivos en la carpeta "assets" con un nombre de archivo que contenga "level2", puede usar algo parecido a esto: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>

Convertir SourceAppxContentGroupMap.xml en AppxContentGroupMap.xmlConvert SourceAppxContentGroupMap.xml to AppxContentGroupMap.xml

Para convertir SourceAppxContentGroupMap.xml a la versión final, AppxContentGroupMap.xml , puede utilizar Visual Studio 2017 o la herramienta de línea de comandos 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.

Para usar Visual Studio para convertir el mapa del grupo de contenido:To use Visual Studio to convert your content group map:

  1. Agregar el SourceAppxContentGroupMap.xml a la carpeta de proyectoAdd the SourceAppxContentGroupMap.xml to your project folder
  2. Cambie la acción de compilación de SourceAppxContentGroupMap.xml a "AppxSourceContentGroupMap" en el ventana PropiedadesChange the Build Action of the SourceAppxContentGroupMap.xmlto "AppxSourceContentGroupMap" in the Properties window
  3. Haga clic con el botón derecho en el proyecto en el explorador de soluciones.Right click the project in the solution explorer
  4. Vaya a Store-> convertir el archivo de asignación de grupo de contenidoNavigate to Store -> Convert Content Group Map File

Si no ha desarrollado la aplicación en Visual Studio, o si simplemente prefiere usar la línea de comandos, use la herramienta de MakeAppx.exe para convertir el 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 sencillo comando de MakeAppx.exe podría tener un aspecto similar al siguiente:A simple MakeAppx.exe command might look something like this:

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

La opción/s especifica la ruta de acceso a SourceAppxContentGroupMap.xml y/f especifica la ruta de acceso al AppxContentGroupMap.xml .The /s option specifies the path to the SourceAppxContentGroupMap.xml, and /f specifies the path to the AppxContentGroupMap.xml. La última opción,/d, especifica el directorio que se debe usar para expandir los comodines de nombre de archivo; en este caso, es el directorio del proyecto de la aplicación.The final option, /d, specifies which directory should be used for expanding file name wildcards, in this case, its the app project directory.

Para obtener más información sobre las opciones que puede usar con MakeAppx.exe, abra un símbolo del sistema, vaya a MakeAppx.exe y escriba:For more information about options you can use with MakeAppx.exe, open a command prompt, navigate to MakeAppx.exe and enter:

MakeAppx convertCGM /?

Eso es todo lo que necesitará para preparar su AppxContentGroupMap.xml aplicación.That's all you'll need to get your final AppxContentGroupMap.xml ready for your app! Todavía hay más cosas que hacer antes de que la aplicación esté totalmente lista para el Microsoft Store.There's still more to do before your app is fully ready for the Microsoft Store. Para obtener más información sobre el proceso completo de agregar la instalación de streaming a la aplicación, consulte esta entrada de blog.For more information on the complete process of adding streaming install to your app, check out this blog post.