> ## 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.

# 使用 MSIXVC2 进行内容更新

> 使用 MSIXVC2 进行内容更新

MSIXVC2 从根本上改变了内容更新的计算和交付方式。使用原始 MSIXVC 格式时,内容更新以固定的 4 KB 块边界为单位,并对 pack 文件中的文件布局、区块顺序和对齐敏感。MSIXVC2 使用基于内容的分段,在字节级别跟踪变化,从而消除了 MSIXVC 中导致更新体积膨胀的对齐约束。

<Note>
  有关原始 MSIXVC 格式相关的内容更新指导,请参见 [内容更新最佳实践](/build/core-features/common/packaging/packaging-updates)。
</Note>

## MSIXVC2 内容更新的工作方式

### 基于内容的分段

MSIXVC2 根据实际内容将文件数据拆分为可变大小的分段,而不是使用固定的块边界。每个分段通过其内容的哈希进行标识。

这种方式意味着:

* **在区块之间移动文件不会触发重新下载。** 无论文件属于哪个区块,其内容哈希都保持不变。
* **在区块内重排文件不会触发重新下载。** 分段边界由内容决定,而不是位置。
* **重排区块不会触发重新下载。** 区块布局是一个逻辑概念,不影响数据的物理分段。
* **插入或移除数据不会产生级联效应。** 与固定块系统不同,小的插入不会移动所有后续块,也不会强制重新下载未变化的内容。

### 上传时的去重

每个分段在上传前都会被哈希。上传过程会查询 CDN,以确定哪些分段已经存在于以前的版本中。只有新的或变化过的分段会被上传并交付给玩家。这种去重是自动进行的 —— 无需开发者干预。

### 按分段加密和压缩

每个分段都独立压缩和加密。这确保更新一个分段不会影响其他分段。

## 相对于 MSIXVC 的变化

MSIXVC 内容更新中的以下对齐和布局约束在 MSIXVC2 中 **不再适用**:

| MSIXVC 约束                | MSIXVC2 行为            |
| ------------------------ | --------------------- |
| 将资源在 pack 文件内对齐到 4 KB 边界 | 不再需要。基于内容的分段与对齐无关。    |
| 不要更改区块 ID 或在区块之间移动文件     | 区块布局的更改是免费的。没有重新下载惩罚。 |
| 不要重排区块、文件或资源             | 重排是免费的。分段哈希基于内容。      |
| 数据无法高效地移动                | 数据移动由内容哈希自然处理。        |
| 固定的最小哈希树开销随游戏体积而扩展       | 开销极小;可部分下载。           |

<Tip>
  如果你当前投入精力维护稳定的文件排序、冻结资源布局,或在构建流水线中仔细管理 4 KB 对齐,那么 MSIXVC2 消除了这些工作的必要性。如果你还在为主机发布 XVC 包,这些优化仍然适用。
</Tip>

## 更新大小对比

以下数据对比了相同游戏构建下 MSIXVC 与 MSIXVC2 之间的内容更新大小。游戏没有做任何更改 —— 相同的资源、相同的构建,只是打包格式不同。

| 游戏     | 引擎     | MSIXVC 更新 | MSIXVC2 更新 | 缩减    |
| ------ | ------ | --------- | ---------- | ----- |
| Game A | Unity  | 1.27 GB   | 71 MB      | ↓ 94% |
| Game B | Unity  | 411 MB    | 49 MB      | ↓ 88% |
| Game C | 自研     | 2.5 GB    | 473 MB     | ↓ 81% |
| Game D | Unreal | 1.75 GB   | 595 MB     | ↓ 66% |

Game D 的改善较小,是因为该游戏已经针对 MSIXVC 内容更新(CUv3)进行了手动优化。大多数没有做过这种优化的游戏会看到更大的缩减。使用 MSIXVC2 后,这类优化工作不再是必要的。

## 包开销的缩减

每个 MSIXVC 包都包含一个固定的最小哈希树,其大小随游戏的总大小而扩展。此开销在每次更新时都会被完整下载。对于大型游戏而言,这一开销非常显著:

| 游戏               | MSIXVC 开销       | MSIXVC2 开销      | 缩减    |
| ---------------- | --------------- | --------------- | ----- |
| Game C(\~320 GB) | 2.049 GB(0.66%) | 184.3 MB(0.06%) | ↓ 91% |

MSIXVC2 的开销还可以部分下载,这意味着玩家只会收到与其更新相关的那部分元数据。

## 基础游戏体积的改善

基于内容的分段和内置压缩也减小了基础游戏的下载体积:

| 游戏     | MSIXVC 基础包 | MSIXVC2 基础包 | 缩减    |
| ------ | ---------- | ----------- | ----- |
| Game A | 11.7 GB    | 4.2 GB      | ↓ 64% |
| Game B | 918 MB     | 558 MB      | ↓ 39% |
| Game C | 320.0 GB   | 270.5 GB    | ↓ 15% |
| Game D | 129.9 GB   | 121.0 GB    | ↓ 7%  |

包含未压缩内容或在区块间有大量重复数据的游戏,基础包缩减幅度最大。已经对所有内容进行压缩且没有重复数据的游戏(如 Game D)会看到较小但仍具有意义的改进。

## 评估 MSIXVC2 是否适合你的游戏

要衡量 MSIXVC2 为你自己的游戏带来的内容更新改进:

1. 取你游戏中两个先后连续的构建(例如,一个发布版本以及紧随其后的补丁)。
2. 使用 `makepkg` 对这两个构建都进行打包。

```text theme={null}
   makepkg pack /msixvc2 /f layout.xml /d <old_build> /pc /pd <output_old>
   makepkg pack /msixvc2 /f layout.xml /d <new_build> /pc /pd <output_new> /priorpackage <output_old\package.msixvc>
```

3. 将结果更新大小与等效的 MSIXVC(v1)构建进行比较。
4. 使用比较结果来规划你迁移到 MSIXVC2 的方案。

<Info>
  将 MSIXVC2 包上传到 Partner Center 中的单独分支(例如 `msixvc2`)。不要在同一分支上混合使用 MSIXVC2 和 MSIXVC 包 —— 将分支从 MSIXVC2 恢复到 MSIXVC 需要完整重新上传,并强制该分支上的玩家完整重新下载。有关详细信息,请参见 [包分支最佳实践](/build/core-features/common/packaging/overviews/packaging-msixvc2-overview#package-branch-best-practices)。
</Info>

## 跨平台游戏的填充注意事项

如果你的游戏同时在 PC(MSIXVC2)和主机(XVC)上发布,你可以为每个平台使用单独的填充配置。在 MSIXVC2 下,你可以安全地减少或移除 PC 构建的填充,而不会影响更新效率。如果你希望在各平台上保持相同的配置,该配置也没有问题 —— MSIXVC2 同样能处理这两种情况。

## 另请参见

[MSIXVC2 打包概述](/build/core-features/common/packaging/overviews/packaging-msixvc2-overview) [内容更新最佳实践(MSIXVC)](/build/core-features/common/packaging/packaging-updates) [MSIXVC2 加密模型](/build/core-features/common/packaging/packaging-encryption-msixvc2) [MSIXVC2 for PC 入门](/build/core-features/common/packaging/overviews/packaging-getting-started-for-PC-msixvc2) [Make package (makepkg.exe)](/build/core-features/common/packaging/deployment/makepkg)


## Related topics

- [创建、检查和测试内容更新](/zh-CN/build/core-features/common/packaging/packaging-testing-updates.md)
- [内容更新最佳实践](/zh-CN/build/core-features/common/packaging/packaging-updates.md)
- [MSIXVC2 加密模型](/zh-CN/build/core-features/common/packaging/packaging-encryption-msixvc2.md)
- [MSIXVC2 打包概述](/zh-CN/build/core-features/common/packaging/overviews/packaging-msixvc2-overview.md)
- [XBOX GDK 游戏的打包与部署](/zh-CN/build/core-features/common/packaging/index.md)
