MSIX 包类型

MSIX 支持四种包类型:Main、Framework、Resource 和 Optional。 MSIX 还支持捆绑包,这些包是一个或多个 MSIX 包的分发容器。

包类型定义部署、依赖项、执行和维护行为的组合。 某些行为固有于该类型,而清单声明可以覆盖其他默认值。

类型 主要用途 清单或身份指示器
主页 应用程序的主包 没有适用于另一种包类型的声明
框架 共享库、组件或运行时内容 <Framework>true</Framework>
资源 特定于语言、规模或限定符的资源 <ResourcePackage>true</ResourcePackage>
可选 与一个主软件包关联的附加内容 <uap3:MainPackageDependency>
套装 多个 MSIX 包的分发容器 捆绑清单和一个 ResourceId 值为 ~

主要软件包

Main 包表示应用程序的主包。 它可以声明应用程序、功能、依赖项、扩展和进程外服务器。

清单文件不包含显式 Main-package 标记。 当包本身未声明为另一个包类型时,包是一个 Main 包。

框架包

框架包提供共享库、组件、资源或其他运行时内容。 其他包或进程在加载框架包内容之前将框架包添加到其包图。

框架包支持并行版本,以便应用程序可以独立迁移到较新版本。 包通过将 Framework 清单元素设置为 true 来声明此类型。

有关使用打包和未打包进程中的框架包的信息,请参阅 使用动态依赖项 API。

资源包

资源包将语言、显示缩放或其他限定符特定的资源与主包或可选包分开。 Windows仅安装应用于设备或用户的资源包。

默认情况下,资源包不允许执行。 包可以使用 uap6:AllowExecution 覆盖此默认值。 包通过将 ResourcePackage 设置为 true 来声明资源类型。

可选软件包

可选包包含特定主包的其他内容。 例如,应用程序可以将可下载的地图、高分辨率资产或可选工具放在单独的包中。

与框架包不同,可选包与一个 Main 包系列相关联。 它通过 uap3:MainPackageDependency 声明该关系。

有关编写和相关集合要求,请参阅 可选包和相关集合编写。

捆绑软件包

MSIX 捆绑包 (.msixbundle) 包含一个或多个 MSIX 包。 捆绑包提供一个分发项目,同时允许Windows仅安装应用于目标设备的体系结构和资源包。

捆绑包中的所有包都属于同一包系列。 捆绑包是容器,而不是第五个可部署包类型。

识别代码中的包类型

Windows.ApplicationModel.Package 类公开标识包类型的属性:

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";
}

使用 PowerShell 标识包类型

默认情况下, Get-AppxPackage 返回 Main 和 Framework 包。 使用 -PackageTypeFilter 包括其他类型:

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

输出对象不提供 IsOptional 属性。 使用筛选器以包含可选包,并在需要区分它们时检查其清单或包关系。