> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 创建、检查和测试内容更新

> 创建、检查和测试内容更新

<Tip>
  **正在使用 MSIXVC2?** 要比较 MSIXVC 与 MSIXVC2 之间的更新体积,请使用 `makepkg` 对两个构建都进行打包。有关详细信息,请参见 [使用 MSIXVC2 进行内容更新](/build/core-features/common/packaging/packaging-updates-msixvc2) 和 [MSIXVC2 for PC 入门](/build/core-features/common/packaging/overviews/packaging-getting-started-for-PC-msixvc2#comparing-update-sizes)。
</Tip>

## 概述

本文介绍如何发布内容更新、用于生成和衡量更新的工具,以及如何测试关键的更新场景以确保预期且最优的行为。

## 内容更新的工作方式

当你为游戏包提供更新时,游戏服务始终会最小化需要传输的字节数。这种优化对使用游戏设备的用户和上传包的开发者都适用。系统通过以下算法计算此差异(*delta*):从整体上看,尝试最大化两个包之间 4-KiB 分段的匹配数量。

系统将此 delta 编码为 `.xsp`(更新流式计划,update streaming plan)文件的一部分。通过这些文件,系统可以精确地知道要从网络下载哪些字节,以及如何将它们应用到任何可能存在的现有包版本。

要在开发中模拟并测试准确的 delta 更新行为,请使用合适的 `makepkg` 选项创建包。此外,请使用合适的命令来安装和更新包。

## 基于以前的包版本创建更新

使用 [`makepkg`](/build/core-features/common/packaging/deployment/makepkg) pack 创建包。要创建使用先前包的包,请使用 `/priorpackage` 参数:

```cmd theme={null}
makepkg pack /f chunks_layout.xml /d [build directory] /pd .\output /priorpackage [previous version].xvc
```

先前的包必须与你正在创建的包具有相同的包标识,如 microsoftgame.config 中定义。

该命令会创建一个名为 `[new package name]_update-[old version number].[guid].xsp` 的 .xsp 文件。例如,41336MicrosoftATG.ATGGameHubRequiredGame\_200.0.0.0\_neutral\_\_dspnxghe87tn0\_xs\_update-100.0.0.0.5890f4a0-b449-4c5d-80ff-b78b19ed3439.xsp

该文件是 **流式计划**,编码了从旧包更新到新包时需要更改的内容。[测试更新](#testing-updates) 部分展示了如何使用此计划。

## 检查更新大小

运行前述命令时,它还会生成两个同名的附加文件:一个 .html 文件和一个 .json 文件。

这两个文件都包含以下信息:

1. 更新下载字节数的摘要
2. 一个表格,汇总了更新为特定标签、语言或设备类型安装的数据量
3. 一个可排序的文件表格,显示更新更改的字节数,以及这一更改占整个文件大小的百分比
4. 对于任何未 100% 更新的文件,提供指向单独表格的链接,显示更新更改了每个文件中哪些范围的数据

利用这些信息识别哪些文件在更新中变化最大。查看每个文件,看看其中变化的比例和位置是否符合预期。如果你看到某些文件导致的更新比通常更大,请查看 [高效编写更新](/build/core-features/common/packaging/packaging-updates#author-packages-efficiently) 部分中的准则。

对两个 .xvc 文件运行 `packageutil compare` 也会生成同样的这些文件,并提供包差异的摘要输出。该命令还会生成 .xsp 文件。

## 差异上传

上传到 Partner Center 时会自动利用差异计算算法。你上次上传的包(针对该分支)与正在上传的包之间的差异会在开始时计算,以便只将变化过的数据从上传机器传输到摄取(ingestion)服务。

## 测试更新

要验证系统 UI 中显示的更新大小,请执行以下步骤:

1. `xbapp install` \[old version.xvc]
2. `xbapp update` \[new version.xvc] (`/plan=`\[.xsp file])

更新时,进入系统 UI 中的“队列”查看正在更新的友好字节数。

如果 .xsp 之前已由其他命令生成,并且与 .xvc 文件位于同一位置,则 /plan 参数为可选。

在 PC 上,使用 `wdapp` 命令代替。包文件的扩展名为 .msixvc,可以在 XBOX 应用和 Microsoft Store 应用的下载队列部分看到安装和更新进度。`wdapp update` 不支持 /plan 参数。它会使用为目标版本生成(如果已创建)的 .xsp 文件。

## 广告更新(Advertising updates)

广告更新与其他更新方式略有不同。当你广告一个更新时,你使更新对游戏 **可用**,这会导致特定的系统行为。

要广告一个可用的更新,请对 `xbapp` 或 `wdapp` update 应用 `/m` 或 `/a` 标志。此操作导致更新在游戏启动之前不会被应用。发生此情况时:

* 主机:系统会显示一个对话框,提示需要更新。
* PC:对于开发版本,不会显示系统提示,并且可以自由启动构建,除非该构建是使用 `wdapp install` 或 bootstrapper 安装的。在这种情况下,启动游戏会调用 PC bootstrapper,它会检查更新并提示你安装。

广告更新还会导致某些 `XStore` API 作出响应,允许游戏检测可用的更新。此行为对 DLC 包最为相关。有关详细信息,请参见 [Checking for updates](https://learn.microsoft.com/build/store/commerce/fundamentals/xstore-checking-for-updates)。

## Store 包更新

前面的示例涉及使用本地包进行安装和更新。在某些场景下,你可能希望使用已上传到 Partner Center 并从 Store CDN 下载的包来测试更新。这个过程验证两方面:从 Store 更新时的性能,以及利用作为摄取过程一部分而生成的流式计划。

遗憾的是,由于签名差异,你无法从本地包更新到 Store 包。你能做的是:先向 Partner Center 上传一个版本,然后在一台或多台开发套件上从 Store 应用中安装该版本。接着上传新版本。当新版本发布后,在已安装旧版本的开发套件上,验证是否检测到新版本并能够按预期的 delta 大小进行更新。

要重复此测试,在更新之前将旧版本的安装复制到外部驱动器,以便之后可以将其复制回覆盖任何新版本。如果你没有保存此版本,可以请求 CDN URL,以便使用 `xbapp install` 或 `wdapp install` 从中安装较旧版本。安装较旧版本后,你可以重复更新测试。

## 混合光盘与 CDN 更新

更新同样适用于光盘安装。当你从光盘安装时,安装过程会从光盘安装与最新可用数字包相比未发生变化的光盘内容。安装过程会同时从 Store CDN 安装其余内容。此过程会自动进行。

要模拟此过程,请使用以下命令:

```cmd theme={null}
xbapp update http://server/[latest version].xvc /p:[disc package].xvc`
```

通过 HTTP 服务器提供更新包是一种变通方法,因为安装只能有一个来自开发 PC 本地存储的源。

如果你使用光盘 .xvc 包刻录测试光盘,则光盘包可以指向光盘路径。

### 另请参见

[内容更新最佳实践](/build/core-features/common/packaging/packaging-updates)

[Checking for updates](https://learn.microsoft.com/build/store/commerce/fundamentals/xstore-checking-for-updates)


## Related topics

- [检查更新](/zh-CN/publishing/xstore-commerce/xstore-checking-updates.md)
- [内容更新最佳实践](/zh-CN/build/core-features/common/packaging/packaging-updates.md)
- [流式安装与智能交付概述](/zh-CN/build/core-features/common/packaging/overviews/streaming_install-intelligent_delivery.md)
- [产品更改和内容更新](/zh-CN/publishing/game-publishing/publishing-processes/managed-creators/publishing-processes-post-release-lifecycle.md)
- [在 RETAIL 沙盒中进行测试的建议](/zh-CN/publishing/game-publishing/publishing-processes/managed-creators/publishing-processes-recommendations-for-testing-in-retail.md)
