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

# Make package (makepkg.exe)

> Make package (makepkg.exe)

创建应用程序包、将包上传到 Partner Center，并执行相关的打包操作。`makepkg` 支持 XVC、MSIXVC 和 MSIXVC2 包格式。使用 `/msixvc2` 选项生成 MSIXVC2 格式的包。

```text theme={null}
makepkg <command> [options]
```

## 全局选项

| 选项 | 说明 |
| - | - |
| `/v` | 启用向控制台输出详细信息。 |
| `/?`, `/h` | 显示帮助和用法信息。 |

## 命令

* [pack](#pack) - 使用磁盘上的文件创建新的应用程序包。
* [upload](#upload) - 将包或文件目录上传到 Partner Center。
* [genkey](#genkey) - 生成用于 `pack /lk` 的加密密钥。
* [genid](#genid) - 在 Product ID GUID 与 Store ID 之间转换。
* [genmap](#genmap) - 基于磁盘上的内容生成映射 XML 文件。
* [validate](#validate) - 在不创建包的情况下运行验证。
* [updatesubval](#updatesubval) - 单独更新 SubmissionValidator.dll，不运行其他操作。
* [localize](#localize) - 基于磁盘上的内容生成 Resources.pri 文件。

## pack

使用磁盘上的文件创建新的应用程序包。

```text theme={null}
makepkg pack [options]
```

**用法示例：**

```text theme={null}
makepkg pack /msixvc2 /f layout.xml /d <sourcedir> /pc /pd <destinationdir>
```

### 选项

| 选项 | 说明 |
| - | - |
| `/msixvc2` | 生成 MSIXVC2 包格式的包。不带此选项时生成 MSIXVC 包。 |
| `/updcompat 3` | 对 XVC 和 MSIXVC 包使用子文件级内容更新粒度。唯一支持的值是 `3`。 |
| `/d <sourcedir>` | **（必需）** 指定包含要打包内容的源目录。 |
| `/pd <destinationdir>` | **（必需）** 指定生成包的目标目录。 |
| `/f <mapfile>` | 指定用于打包的映射文件。省略时生成默认的单块布局。 |
| `/compress <method>` | 压缩输出。可用方法有 `Automatic`（默认）和 `None`。`Automatic` 对 MSIXVC2 包使用 Brotli，对 XVC 或 MSIXVC 包不压缩。 |
| `/pc` | 生成用于 PC 的包。 |
| `/contentid <contentid>` | 指定此包所属的内容 ID。 |
| `/gameos <gameos>` | 指定要嵌入到包中的 game OS 文件。 |
| `/l` | 使用唯一的内容许可证加密包。将 XVC 或 MSIXVC 包提交认证时，除非认证团队另有指示，否则请使用 `/l` 或 `/lk`。 |
| `/lk <key.lekb>` | 使用指定的密钥文件通过内容许可证加密包。使用 `genkey` 生成密钥文件。将 XVC 或 MSIXVC 包提交认证时，除非认证团队另有指示，否则请使用 `/l` 或 `/lk`。 |
| `/productid <productid>` | 指定此包所属的产品 ID。 |
| `/maxencryptionfragments <count>` | 指定在包元数据中预留的加密片段数量。此选项仅适用于 XVC 和 MSIXVC 包。 |
| `/priorpackage <OldPackage.msixvc>` | 指定先前一次 pack 操作生成的 XVC、MSIXVC 或 MSIXVC2 包，用于内容更新大小比较。 |
| `/loggable` | 禁止输出包含不适合日志文件的控制字符。 |
| `/usepublisherkey <publisherkeyname>` | 使用由 `publisherkeyname` 标识的预安装 CNG 密钥对 XVC 或 MSIXVC 发布者内容包进行签名，或将发布者公钥嵌入父基础游戏包中。仅适用于 XVC 和 MSIXVC。 |
| `/publisherkeyprovider <publisherkeyprovider>` | 指定保存由 `/usepublisherkey` 命名的发布者密钥的 CNG 密钥存储提供程序。未指定时，使用 Microsoft Software Key Storage Provider。仅适用于 XVC 和 MSIXVC。 |
| `/usepublishercert <thumbprint\|certificate.cer>` | 指定用于对 MSIXVC2 发布者内容包进行签名或从父包对其进行授权的证书的指纹或 .cer 文件路径。.cer 文件会与证书存储中的对应私钥匹配。需要 `/msixvc2`。 |
| `/publishercertstore <store>` | 指定包含由 `/usepublishercert` 命名的发布者证书的证书存储。未指定时，使用 CurrentUser 个人存储。需要 `/msixvc2`。 |
| `/symbolpaths <symbolpaths>` | 指定符号打包期间用于符号解析查找的额外路径。多个路径以分号分隔。 |
| `/skipsymbolbundling` | 跳过符号打包。 |
| `/skipvalidation` | 跳过 Submission Validator。对于可能提交认证的构建，请勿使用此选项。 |
| `/validationcritical` | 将 Submission Validator 的失败视为 `makepkg` 进程的严重失败。 |
| `/openvalidationlog` | 验证后在默认 XML 应用程序中打开 Submission Validator 日志文件。 |
| `/validationlanguage <lang>` | 指定 Submission Validator 日志文件的附加语言。 |
| `/validationpath <path>` | 指定加载 SubmissionValidator.dll 的目录。 |
| `/updatesubval` | 在验证之前下载最新的 SubmissionValidator.dll（若已安装版本非最新）。使用 `/validationpath` 选择其他位置。如果更新失败，将继续使用已安装的 DLL 进行打包或验证。若要在不执行其他操作的情况下更新，请使用 [updatesubval](#updatesubval)。 |

### 备注

默认情况下，`makepkg pack` 使用所有开发工具包都识别的众所周知的测试加密密钥加密 XVC 或 MSIXVC 包。这些包并未加密保护。

为了在上传时提供额外保护，XVC 和 MSIXVC 包可以使用 `/l` 或 `/lk`。使用 `/l` 的包上传前不能安装到开发工具包或 PC 上。使用 `/lk` 的包可在上传前安装到开发工具包上。无论使用哪种上传加密模式，XBOX 服务都会使用 Microsoft 管理的加密密钥重新加密包以进行分发。

MSIXVC2 包不使用客户端上传加密。XBOX 服务会处理用于分发的加密。

有关映射文件架构的信息，请参阅[部署包架构](https://docs.xbox.com/zh-CN/build/core-features/common/packaging/deployment/atoc-deployment-schema.md)。

## upload

将包上传到 Partner Center。对于 MSIXVC2，指定 `/d` 时 `upload` 命令还可将松散文件打包并在一次操作中上传。松散文件上传需要 `/msixvc2` 选项。

如果未指定分支或飞行版，包将上传到 `main` 分支。

EKB 文件和 Submission Validator 日志文件应与包位于同一目录中，并会自动上传。存在符号包时也会一并上传。Store ID 会从包中提取，若生成包时未提供 Store ID，也可通过参数提供。

```text theme={null}
makepkg upload [options]
```

**用法示例（上传已构建的包）：**

```text theme={null}
makepkg upload /pd <package_directory> /branch <branch> /auth CacheableBrowser
```

**用法示例（打包并上传散文件）：**

```text theme={null}
makepkg upload /d <sourcedir> /msixvc2 /pc /branch <branch>
```

### 包来源选项

| 选项 | 说明 |
| - | - |
| `/pd <package_directory>` | 指定包文件或其所在目录。如果目录中包含多个包，请指定完整的包文件名。 |
| `/d <sourcedir>` | 指定要在一次操作中打包并上传的源目录。 |
| `/f <mapfile>` | 指定与 `/d` 一起使用的映射文件。 |
| `/msixvc2` | 与 `/d` 一起使用时生成 MSIXVC2 包。 |
| `/compress <method>` | 压缩输出。可用方法有 `Automatic`（默认）和 `None`。 |
| `/pc` | 与 `/d` 一起使用时生成 PC 包。 |
| `/productid <productid>` | 指定此包所属的产品 ID。 |

### 目标选项

| 选项 | 说明 |
| - | - |
| `/storeid <storeId>` | 指定 Store ID。省略时会从包中提取 Store ID。 |
| `/branch <branch>` | 指定要上传到的分支。若未指定分支或飞行版，默认为 `main`。 |
| `/flight <flight>` | 指定要上传到的飞行版。此选项不能与 `/branch` 同时使用。 |
| `/market <market>` | 指定要上传到的市场。默认为 `default`。 |
| `/disclayout <path>` | 为发行在多张光盘上的包指定光盘布局文件。 |

### 身份验证选项

| 选项 | 说明 |
| - | - |
| `/auth <method>` | 指定身份验证方法。默认为 `CacheableBrowser`。仅 MSIXVC2 上传支持多种方法。XVC 和 MSIXVC 上传只能使用 `CacheableBrowser`。若要对这些格式使用高级身份验证，请使用[包上传工具](https://docs.xbox.com/zh-CN/build/core-features/common/packaging/package-uploader.md)。 |
| `/tenantid <tenantId>` | 指定要上传到的租户。省略时使用用户默认租户。 |
| `/clientid <clientId>` | 指定客户端 ID。`ManagedIdentity`、`ClientCertificate` 和 `ClientSecret` 需要。 |
| `/clientsecret <secret>` | 指定客户端密码。需要 `/auth ClientSecret`。 |
| `/certthumbprint <thumbprint>` | 指定 `ClientCertificate` 的证书指纹。 |
| `/certstore <store>` | 指定证书存储名称。默认为 `My`。 |
| `/certlocation <location>` | 指定证书位置，例如 `CurrentUser` 或 `LocalMachine`。默认为 `CurrentUser`。 |
| `/certpassword <password>` | 指定受密码保护的证书文件的密码。 |
| `/resourceid <resourceId>` | 指定 `ManagedIdentityFederated` 使用的 Azure 资源 ID。 |

### 验证与符号选项

| 选项 | 说明 |
| - | - |
| `/skipvalidation` | 跳过 Submission Validator。 |
| `/validationcritical` | 将 Submission Validator 的失败视为严重失败。 |
| `/validationlanguage <lang>` | 指定 Submission Validator 日志文件的附加语言。 |
| `/validationpath <path>` | 指定加载 SubmissionValidator.dll 的目录。 |
| `/updatesubval` | 在验证之前下载最新的 SubmissionValidator.dll。失败行为参见 [pack](#pack)。 |
| `/symbolpaths <symbolpaths>` | 指定额外的符号解析路径，多个路径以分号分隔。 |
| `/skipsymbolbundling` | 跳过符号打包。 |

### 身份验证方法

| 方法 | 说明 |
| - | - |
| `CacheableBrowser` | 打开浏览器进行交互式登录，并缓存凭据。此为默认方法。 |
| `Browser` | 打开浏览器进行交互式登录，不缓存凭据。 |
| `AzureCli` | 使用 Azure CLI 凭据。 |
| `AzurePipelines` | 使用 Azure Pipelines 服务连接。 |
| `ManagedIdentity` | 使用 Azure 托管标识。需要 `/clientid`。 |
| `ManagedIdentityFederated` | 使用联合托管标识。需要 `/clientid` 和 `/resourceid`。 |
| `ClientSecret` | 使用客户端 ID 和密码。需要 `/clientid` 和 `/clientsecret`。 |
| `ClientCertificate` | 使用客户端证书。需要 `/clientid` 和 `/certthumbprint`。 |
| `Environment` | 使用环境变量中的凭据。 |
| `Default` | 依次尝试多种身份验证方法。 |

## genkey

生成用于 `pack /lk` 的本地托管密钥数据块 (LEKB)。

```text theme={null}
makepkg genkey [options]
```

| 选项 | 说明 |
| - | - |
| `/ekb <ekbfile>` | 指定生成的 LEKB 文件路径。使用 `.lekb` 扩展名以区别于 `makepkg pack` 生成的 `.ekb` 文件。 |

在包创建过程中将 LEKB 文件提供给 `makepkg pack /lk`，可使用稳定的加密密钥。此密钥：

1. 允许 `packageutil compare` 生成准确的更新大小估算。
2. 使用主机和 PC 下载内容更新时相同的算法，向 Partner Center 进行安全增量上传。
3. 生成可安装到开发工具包上的包。
4. 使用只能在特定环境中解密的安全加密密钥材料。

LEKB 文件包含轻度混淆的加密密钥材料。任何同时持有 LEKB 文件和相应包的人都能解密该包，因此需要妥善保管该文件。

## genid

在 Product ID GUID 与 Store ID 之间转换。

```text theme={null}
makepkg genid [options]
```

| 选项 | 说明 |
| - | - |
| `/storeid <storeId>` | 指定要转换的 Store ID。 |
| `/productid <productId>` | 指定要转换的 Product ID GUID。 |

## genmap

基于磁盘上的内容生成映射 XML 文件。生成的文件包含一个块，可以编辑以将内容拆分为多个块或添加 Intelligent Delivery 标签。

```text theme={null}
makepkg genmap /f <mapfile> /d <contentdirectory>
```

| 选项 | 说明 |
| - | - |
| `/f <mapfile>` | 指定生成的映射文件的路径。 |
| `/d <contentdirectory>` | 指定其内容将添加到映射文件中的目录。 |

## validate

在不创建包的情况下运行包验证。使用此命令可在执行完整 pack 操作前验证内容和配置。

```text theme={null}
makepkg validate [options]
```

`validate` 命令接受与 [pack](#pack) 相同的选项。

## updatesubval

下载、验证并安装最新的 SubmissionValidator.dll，且不创建、验证或上传包。

```text theme={null}
makepkg updatesubval [/validationpath <path>]
```

### 选项

| 选项 | 说明 |
| - | - |
| `/validationpath <path>` | 指定包含或应接收 SubmissionValidator.dll 的目录。省略时，命令先检查 `makepkg` 工具目录，然后检查 `%GameDK%\bin` 目录。 |

### 备注

如果 SubmissionValidator.dll 已是最新版本，命令会报告文件为最新并成功退出而不进行下载。如果文件缺失，命令会进行安装。成功时，命令会显示磁盘上 SubmissionValidator.dll 的版本。

与打包或验证过程中使用的 `/updatesubval` 选项不同，独立的 `updatesubval` 命令在更新失败时返回非零退出码。作为选项使用时，更新失败并非致命的，打包或验证操作会继续使用已安装版本的 SubmissionValidator.dll。

## localize

基于磁盘上的内容生成 Resources.pri 文件。

```text theme={null}
makepkg localize /d <sourcedir> [options]
```

| 选项 | 说明 |
| - | - |
| `/d <sourcedir>` | **（必需）** 指定包含要本地化内容的源目录。 |
| `/resw <reswdir>` | 指定相对于根目录并包含 RESW 文件的目录。 |
| `/pd <outputdir>` | 指定 Resources.pri 的输出目录。省略时，文件放置在内容目录中。 |
| `/t <tempdir>` | 指定用于将 Resources.pri 转换为 XML 的临时目录。 |
| `/gc <gameconfigpath>` | 当 MicrosoftGame.config 不在内容目录根部或使用其他名称时，指定其路径。 |

有关详细信息，请参阅 [MicrosoftGame.config 本地化](https://docs.xbox.com/zh-CN/build/core-features/common/game-config/MicrosoftGameConfig-Localization.md)。

## 相关主题

[MSIXVC2 打包概述](https://docs.xbox.com/zh-CN/build/core-features/common/packaging/overviews/packaging-msixvc2-overview.md)

[针对 PC 的 MSIXVC2 入门](https://docs.xbox.com/zh-CN/build/core-features/common/packaging/overviews/packaging-getting-started-for-PC-msixvc2.md)

[部署包架构](https://docs.xbox.com/zh-CN/build/core-features/common/packaging/deployment/atoc-deployment-schema.md)

[XBOX Game Package Manager](https://docs.xbox.com/zh-CN/build/core-features/common/packaging/xgpm.md)

[自动化包上传](https://docs.xbox.com/zh-CN/build/core-features/common/packaging/package-uploader.md)


## Related topics

- [packageutil.exe](https://docs.xbox.com/zh-CN/build/core-features/common/packaging/deployment/packageutil.md)
- [部署包架构](https://docs.xbox.com/zh-CN/build/core-features/common/packaging/deployment/atoc-deployment-schema.md)
- [MSIXVC2 打包概述](https://docs.xbox.com/zh-CN/build/core-features/common/packaging/overviews/packaging-msixvc2-overview.md)
- [PC 开发的命令行工具](https://docs.xbox.com/zh-CN/tools/tools-pc/commandlinetools/gr-commandlinetools-toc.md)
- [MSIXVC2 加密模型](https://docs.xbox.com/zh-CN/build/core-features/common/packaging/packaging-encryption-msixvc2.md)
