Tipos de paquete MSIX

MSIX admite cuatro tipos de paquete: Principal, Marco, Recurso y Opcional. MSIX también admite paquetes Bundle, que son contenedores de distribución para uno o varios paquetes MSIX.

Un tipo de paquete define una combinación de comportamiento de implementación, dependencia, ejecución y mantenimiento. Algunos comportamientos son inherentes al tipo, mientras que una declaración de manifiesto puede anular otros valores predeterminados.

Tipo Propósito principal Indicador de manifest o identidad
Principal Paquete principal para una aplicación Ninguna declaración para otro tipo de paquete
Framework Bibliotecas compartidas, componentes o contenido en tiempo de ejecución <Framework>true</Framework>
Recurso Recursos específicos del lenguaje, la escala o el modificador <ResourcePackage>true</ResourcePackage>
Opcional Contenido adicional asociado a un paquete principal <uap3:MainPackageDependency>
Agrupación de trabajos Contenedor de distribución para varios paquetes MSIX Manifiesto de agrupación y un ResourceId valor de ~

Paquetes principales

Un paquete main representa el paquete principal de una aplicación. Puede declarar aplicaciones, funcionalidades, dependencias, extensiones y servidores fuera de proceso.

El manifiesto no contiene un marcador explícito main-package. Un paquete es un paquete principal cuando no se declara como otro tipo de paquete.

Paquetes de marcos

Un paquete framework proporciona bibliotecas compartidas, componentes, recursos u otro contenido en tiempo de ejecución. Otros paquetes o procesos agregan el paquete Framework a su gráfico de paquetes antes de cargar su contenido.

Los paquetes de framework admiten versiones coexistentes para que las aplicaciones puedan pasar a versiones más recientes de forma independiente. Un paquete declara este tipo estableciendo el elemento de manifiesto true en .

Para obtener información sobre el uso de paquetes framework de procesos empaquetados y desempaquetados, consulte Uso de la API de dependencias dinámicas.

Paquetes de recursos

Un paquete de recursos separa los recursos específicos del idioma, los recursos específicos de la escala de presentación u otros recursos específicos del calificador de un paquete principal u opcional. Windows instala solo los paquetes de recursos que se aplican a un dispositivo o usuario.

Los paquetes de recursos no permiten la ejecución de forma predeterminada. Un paquete puede invalidar este valor predeterminado con uap6:AllowExecution. Un paquete declara el tipo de recurso estableciendo ResourcePackage en true.

Paquetes opcionales

Un paquete opcional contiene contenido adicional para un paquete principal específico. Por ejemplo, una aplicación puede colocar mapas descargables, recursos de alta resolución o herramientas opcionales en paquetes independientes.

A diferencia de un paquete Framework, un paquete Optional está asociado a una familia de paquetes Main. Declara esa relación a través de uap3:MainPackageDependency.

Para conocer los requisitos de creación y conjuntos relacionados, consulte Paquetes opcionales y creación de conjuntos relacionados.

Paquetes combinados

Un paquete combinado MSIX (.msixbundle) contiene uno o varios paquetes MSIX. Un paquete proporciona un artefacto de distribución, al tiempo que permite que Windows instale solo los paquetes de arquitectura y recursos que se aplican al dispositivo de destino.

Todos los paquetes de un paquete pertenecen a la misma familia de paquetes. Un bundle es un contenedor en lugar de un quinto tipo de paquete implementable.

Identificar tipos de paquete en el código

La clase Windows.ApplicationModel.Package expone propiedades que identifican un tipo de paquete:

static string GetPackageType(Windows.ApplicationModel.Package package)
{
    if (package.IsBundle)
    {
        return "Bundle";
    }

    if (package.IsFramework)
    {
        return "Framework";
    }

    if (package.IsResourcePackage)
    {
        return "Resource";
    }

    if (package.IsOptional)
    {
        return "Optional";
    }

    return "Main";
}

Identificación de tipos de paquete con PowerShell

De forma predeterminada, Get-AppxPackage devuelve los paquetes Main y Framework. Usa -PackageTypeFilter para incluir otros tipos:

Get-AppxPackage -PackageTypeFilter Main,Framework,Resource,Optional,Bundle |
    Select-Object Name, PackageFullName, IsFramework, IsResourcePackage, IsBundle

El objeto de salida no expone la propiedad IsOptional. Utilice el filtro para incluir paquetes opcionales e inspeccione su manifiesto o la relación del paquete cuando necesite distinguirlos.