可选包和相关集创作

可选包中包含可与主要包相集成的内容。 这些内容可用于可下载内容 (DLC),因为大小限制而划分大型应用,或者用于随附从原始应用中单独分隔出来的任何其他内容。 有关可选包的详细信息,请参阅博客文章:使用可选包扩展应用程序

相关集是可选包的扩展。 相关集允许跨主包和可选包强制执行严格的版本集。 如果相关集部署在 Microsoft Store 外部,则其发布者可能是与主应用不同的发布者。 有关相关集的详细信息,请参阅博客文章:用于创建相关集的工具

可选包和相关集都在主应用的 MSIX 容器内运行。

先决条件

  • Visual Studio 2019 或 Visual Studio 2017(版本 15.1 或更高版本)
  • Windows 10,版本 1703 或更高版本
  • Windows 10,版本 1703 SDK 或更高版本

要获取所有最新的开发工具,请参阅适用于 Windows 10 的下载和工具

注意

要将使用可选包和/或相关集的应用提交到 Microsoft Store,你需要拥有权限。 如果未提交到 Microsoft Store,则可选包和相关集可用于无需合作伙伴中心权限的业务线 (LOB) 或企业应用。 请参阅 Windows 开发人员支持,以获取提交使用可选包和相关集的应用的权限。

代码示例

在阅读本文时,建议按照 GitHub 上的可选包代码示例进行操作,以便亲身了解可选包和相关集在 Visual Studio 中的工作方式。

可选包

要在 Visual Studio 中创建可选包,需要:

  1. 确保应用的“目标平台最低版本”设置为:10.0.15063.0 或更高版本。
  2. 从主包项目中,打开 Package.appxmanifest 文件。 导航到“打包”选项卡并记下包系列名称,即 "_" 字符之前的所有内容。
  3. 从可选包项目中,右键单击 Package.appxmanifest 并选择“打开方式”>“XML(文本)编辑器”
  4. 在文件中找到 <Dependencies> 元素。 添加以下内容,并将 [MainPackageDependency] 替换为步骤 2 中的包系列名称。 这将指定可选包依赖于主包
    <uap3:MainPackageDependency Name="[MainPackageDependency]"/>
    

注意

如果要创建其他发布者的可选包,则需要指定主应用程序的发布者(如果发布者不同)。 如 <uap4:MainPackageDependency Name="Main_app" Publisher="CN=Contoso..." />。 如果要发布到 Microsoft Store,则这不起作用。

从步骤 1 到 4 设置包依赖关系后,可以如常继续开发。 有关详细信息,请参阅博客文章:生成第一个可选包

可以将 Visual Studio 配置为每次部署可选包时都重新部署主包。 要在 Visual Studio 中设置生成依赖项,应:

  1. 右键单击可选包项目,然后选择“生成依赖项”>“项目依赖项...”
  2. 检查主包项目,然后选择“确定”。

现在,每次输入 F5 或生成可选包项目时,Visual Studio 都会首先生成主包项目。 这将确保主项目和可选项目同步。

相关集由主包和可选包组成,这些包通过主包的 .appxbundle 或 .msixbundle 文件中指定的元数据紧密耦合。 此元数据将主包链接到可选包(使用 .appxbundle 文件名 + 版本),并将可选包链接到主包(使用与版本无关的名称)。 Visual Studio 可帮助你获取文件中正确的元数据。

在安装所有相关集包(由主包中的版本指定)之前,不允许使用任何包的最新版本,以这种方式对相关集中包的版本控制进行同步。 包独立提供服务,但在更新所有包之前,不能使用集中指定的包。 有关相关集的详细信息,请参阅博客文章:用于创建相关集的工具

要为相关集配置应用的解决方案,请使用以下步骤:

  1. 右键单击主包项目,然后选择“添加”>“新项目...”
  2. 在窗口中,搜索 ".txt" 的已安装模板并添加新的文本文件。

    重要

    新文本文件必须命名为:Bundle.Mapping.txt

  3. Bundle.Mapping.txt 文件中输入字符串 "[OptionalProjects]",后跟可选包项目的相对路径。 下面是 Bundle.Mapping.txt 示例文件:
    [OptionalProjects]
    "..\ActivatableOptionalPackage1\ActivatableOptionalPackage1.vcxproj"
    "..\ActivatableOptionalPackage2\ActivatableOptionalPackage2.vcxproj"
    

以这种方式配置解决方案时,Visual Studio 将为主包创建名为 AppxBundleManifest.xml 的捆绑包清单,其中包含相关集所需的所有元数据。

请注意,与可选包一样,相关集的 Bundle.Mapping.txt 文件仅适用于 Windows 10 版本 1703 或更高版本。 此外,应用的目标平台最低版本应设置为 10.0.15063.0 或更高版本。

移除可选包

用户可以进入其“设置”应用并移除可选包。 同样,开发人员可以使用 RemoveOptionalPackageAsync 移除可选包的列表。

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

注意

如果是相关集,平台需要重启主应用程序才能完成移除,以避免应用包含从要移除的包加载的内容的情况。 应用必须通知用户,在应用调用 API 之前,将需要重启应用程序。

如果可选包此时为“仅内容”,开发人员应明确告知平台,在开发人员移除可选包之前,应用程序“未使用”即将移除的包。 这也允许开发人员在不重启的情况下移除包。

已知问题

Visual Studio 当前不支持调试相关集可选项目。 要解决此问题,可以部署和启动激活 (Ctrl + F5) 调试程序,并手动将其附加到进程。 要附加调试程序,请转到 Visual Studio 中的“调试”菜单,选择“附加到进程...”,并将调试程序附加到主应用进程