Creación de paquetes opcionales y conjuntos relacionados

Los paquetes opcionales tienen contenido que se puede integrar con un paquete principal. Son útiles para contenido descargable (DLC), dividir una aplicación grande para restricciones de tamaño o para enviar cualquier contenido adicional independiente de la aplicación original. Para obtener más información sobre los paquetes opcionales, consulte la entrada de blog: Extensión de la aplicación mediante paquetes opcionales.

Los conjuntos relacionados son una extensión de paquetes opcionales. Los conjuntos relacionados permiten aplicar un conjunto estricto de versiones en paquetes principales y opcionales. Los conjuntos relacionados pueden tener publicadores diferentes de la aplicación principal si se implementa fuera de la Tienda. Para obtener más información sobre los conjuntos relacionados, vea la entrada de blog: Tooling to create a related set (Herramientas para crear un conjunto relacionado).

Los paquetes opcionales y los conjuntos relacionados se ejecutan dentro del contenedor MSIX de la aplicación principal.

Requisitos previos

  • Visual Studio 2019 o Visual Studio 2017 (versión 15.1 o posterior)
  • Windows 10, versión 1703 o posterior
  • Windows 10, versión 1703 sdk o posterior

Para obtener todas las herramientas de desarrollo más recientes, consulte Descargas y herramientas para Windows 10.

Nota

Para enviar una aplicación que use paquetes opcionales o conjuntos relacionados al Microsoft Store, necesitará permiso. Los paquetes opcionales y los conjuntos relacionados se pueden usar para aplicaciones empresariales o de línea de negocio (LOB) sin permiso Centro de partners si no se envían a la Tienda. Consulte Windows para desarrolladores para obtener permiso para enviar una aplicación que usa paquetes opcionales y conjuntos relacionados.

Ejemplo de código

Mientras lee este artículo, se recomienda seguir el ejemplo de código de paquete opcional en GitHub para comprender de forma práctica cómo funcionan los paquetes opcionales y los conjuntos relacionados dentro de Visual Studio.

Paquetes opcionales

Para crear un paquete opcional en Visual Studio, deberá:

  1. Asegúrese de que la versión mínima de la plataforma de destino de la aplicación esté establecida en: 10.0.15063.0 o superior.
  2. En el proyecto de paquete principal, abra el archivo Package.appxmanifest . Vaya a la pestaña "Packaging" (Empaquetado) y anote el nombre de la familia de paquetes, que es todo antes del carácter "_".
  3. En el proyecto de paquete opcional, haga clic con el botón derecho en y seleccione Abrir con > Editor XML Package.appxmanifest (texto).
  4. Busca el elemento <Dependencies> en el archivo. Agregue lo siguiente y reemplace [MainPackageDependency] por el nombre de familia del paquete del paso 2. Esto especificará que el paquete opcional depende del paquete principal.
    <uap3:MainPackageDependency Name="[MainPackageDependency]"/>
    

Nota

Si desea crear un paquete opcional desde otro publicador, deberá especificar el publicador de la aplicación principal si son diferentes. Al igual <uap4:MainPackageDependency Name="Main_app" Publisher="CN=Contoso..." />. Esto no funcionará si va a publicar en store.

Una vez configuradas las dependencias del paquete de los pasos 1 a 4, puede seguir desarrollando como lo haría normalmente. Para obtener más información, vea la entrada de blog: Build your first optional package (Compilación del primer paquete opcional).

Visual Studio configurar para volver a implementar el paquete principal cada vez que implemente un paquete opcional. Para establecer la dependencia de compilación Visual Studio, debe:

  1. Haga clic con el botón derecho en el proyecto de paquete opcional y seleccione Compilar dependencias > Project dependencias...
  2. Compruebe el proyecto de paquete principal y seleccione "Aceptar".

Ahora, cada vez que escriba F5 o compile un proyecto de paquete opcional, Visual Studio compilará primero el proyecto de paquete principal. Esto garantizará que el proyecto principal y los proyectos opcionales estén sincronizados.

Un conjunto relacionado consta de un paquete principal y un paquete opcional que están estrechamente acoplados a través de metadatos que se especifican en el archivo .appxbundle o .msixbundle del paquete principal. Estos metadatos vinculan el paquete principal al paquete opcional (con el nombre del archivo .appxbundle + versión) y el paquete opcional al paquete principal (con el nombre independiente de la versión). Visual Studio ayuda a obtener los metadatos correctos en los archivos.

El control de versiones de los paquetes de un conjunto relacionado se sincroniza de forma que no permitirá que se utilice la versión más reciente de ningún paquete hasta que se instalen todos los paquetes de conjunto relacionados (especificados por versión en el paquete principal). Los paquetes se atendidas de forma independiente, pero es posible que los paquetes especificados en el conjunto no se utilicen hasta que se hayan actualizado todos ellos. Para obtener más información sobre los conjuntos relacionados, vea la entrada de blog: Tooling to create a related set (Herramientas para crear un conjunto relacionado).

Para configurar la solución de la aplicación para conjuntos relacionados, siga estos pasos:

  1. Haga clic con el botón derecho en el proyecto de paquete principal y seleccione Agregar > Nuevo elemento...
  2. En la ventana, busque las plantillas instaladas para ".txt" y agregue un nuevo archivo de texto.

    Importante

    El nuevo archivo de texto debe tener el nombre : Bundle.Mapping.txt .

  3. En el Bundle.Mapping.txt archivo, escriba la cadena "[OptionalProjects]" seguida de las rutas de acceso relativas a los proyectos de paquete opcionales. A continuación, se muestra un archivo Bundle.Mapping.txt de ejemplo:
    [OptionalProjects]
    "..\ActivatableOptionalPackage1\ActivatableOptionalPackage1.vcxproj"
    "..\ActivatableOptionalPackage2\ActivatableOptionalPackage2.vcxproj"
    

Cuando la solución se configura de esta manera, Visual Studio un manifiesto de agrupación denominado AppxBundleManifest.xml para el paquete principal con todos los metadatos necesarios para los conjuntos relacionados.

Tenga en cuenta que, al igual que los paquetes opcionales, un archivo para conjuntos relacionados solo funcionará Bundle.Mapping.txt en Windows 10 versión 1703 o posterior. Además, la versión mínima de la plataforma de destino de la aplicación debe establecerse en 10.0.15063.0 o superior.

Quitar paquetes opcionales

Los usuarios pueden ir a su Configuración aplicación y quitar los paquetes opcionales. De forma similar, los desarrolladores pueden usar RemoveOptionalPackageAsync para quitar una lista de paquetes opcionales.

PackageCatalog catalog = PackageCatalog.OpenForCurrentPackage();
List<string> optionalList = new List<string>();
optionalList.Add("FabrikamAgeAnalysis_kwpnjs8c36mz0");
    
// Warn user that application will be restarted. 
var result = await catalog.RemoveOptionalPackagesAsync(optionalList);
if (result.ExtendedError != null)
{
    throw removalResult.ExtendedError;
}

Nota

En el caso de un conjunto relacionado, la plataforma deberá reiniciar la aplicación principal para finalizar la eliminación con el fin de evitar situaciones en las que la aplicación tenga contenido cargado desde el paquete que se va a quitar. Las aplicaciones deben notificar a los usuarios que la aplicación tendrá que reiniciarse antes de que la aplicación llame a la API.

Si el paquete opcional es contenido solo entonces, el desarrollador debe decir explícitamente a la plataforma que el paquete que está a punto de quitar "no está en uso" por parte de la aplicación antes de que el desarrollador quite el paquete opcional. Esto también permite al desarrollador quitar el paquete sin necesidad de reiniciarlo.

Problemas conocidos

La depuración de un proyecto opcional de conjunto relacionado no se admite actualmente en Visual Studio. Para evitar este problema, puede implementar e iniciar la activación (Ctrl + F5) y asociar manualmente el depurador a un proceso. Para adjuntar el depurador, vaya al menú "Depurar" en Visual Studio, seleccione "Asociar al proceso..." y adjunte el depurador al proceso de aplicación principal.