可选包和相关集创作
可选包中包含可与主要包相集成的内容。 这些内容可用于可下载内容 (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 中创建可选包,需要:
- 确保应用的“目标平台最低版本”设置为:10.0.15063.0 或更高版本。
- 从主包项目中,打开
Package.appxmanifest
文件。 导航到“打包”选项卡并记下包系列名称,即 "_" 字符之前的所有内容。 - 从可选包项目中,右键单击
Package.appxmanifest
并选择“打开方式”>“XML(文本)编辑器”。 - 在文件中找到
<Dependencies>
元素。 添加以下内容,并将[MainPackageDependency]
替换为步骤 2 中的包系列名称。 这将指定可选包依赖于主包。<uap3:MainPackageDependency Name="[MainPackageDependency]"/>
注意
如果要创建其他发布者的可选包,则需要指定主应用程序的发布者(如果发布者不同)。 如 <uap4:MainPackageDependency Name="Main_app" Publisher="CN=Contoso..." />。 如果要发布到 Microsoft Store,则这不起作用。
从步骤 1 到 4 设置包依赖关系后,可以如常继续开发。 有关详细信息,请参阅博客文章:生成第一个可选包。
可以将 Visual Studio 配置为每次部署可选包时都重新部署主包。 要在 Visual Studio 中设置生成依赖项,应:
- 右键单击可选包项目,然后选择“生成依赖项”>“项目依赖项...”
- 检查主包项目,然后选择“确定”。
现在,每次输入 F5 或生成可选包项目时,Visual Studio 都会首先生成主包项目。 这将确保主项目和可选项目同步。
相关集
相关集由主包和可选包组成,这些包通过主包的 .appxbundle 或 .msixbundle 文件中指定的元数据紧密耦合。 此元数据将主包链接到可选包(使用 .appxbundle 文件名 + 版本),并将可选包链接到主包(使用与版本无关的名称)。 Visual Studio 可帮助你获取文件中正确的元数据。
在安装所有相关集包(由主包中的版本指定)之前,不允许使用任何包的最新版本,以这种方式对相关集中包的版本控制进行同步。 包独立提供服务,但在更新所有包之前,不能使用集中指定的包。 有关相关集的详细信息,请参阅博客文章:用于创建相关集的工具。
要为相关集配置应用的解决方案,请使用以下步骤:
- 右键单击主包项目,然后选择“添加”>“新项目...”
- 在窗口中,搜索 ".txt" 的已安装模板并添加新的文本文件。
重要
新文本文件必须命名为:
Bundle.Mapping.txt
。 - 在
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 中的“调试”菜单,选择“附加到进程...”,并将调试程序附加到主应用进程。