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

# Make package (makepkg.exe)

> Make package (makepkg.exe)

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

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

## 全局选项

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

## 命令

* [pack](#pack) - 使用磁盘上的文件创建新的应用程序包。
* [upload](#upload) - 将包或文件目录上传到合作伙伴中心。
* [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`                         | 禁止输出包含不适合日志文件的控制字符。                                                                                                                                        |
| `/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 服务会处理用于分发的加密。

有关映射文件架构的信息，请参阅[部署包架构](/build/core-features/common/packaging/deployment/atoc-deployment-schema)。

## upload

将包上传到合作伙伴中心。对于 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`。若要对这些格式使用高级身份验证，请使用[包上传工具](/build/core-features/common/packaging/package-uploader)。 |
| `/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 下载内容更新时相同的算法，向合作伙伴中心进行安全增量上传。
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 本地化](/build/core-features/common/game-config/MicrosoftGameConfig-Localization)。

## 相关主题

[MSIXVC2 打包概述](/build/core-features/common/packaging/overviews/packaging-msixvc2-overview)

[针对 PC 的 MSIXVC2 入门](/build/core-features/common/packaging/overviews/packaging-getting-started-for-PC-msixvc2)

[部署包架构](/build/core-features/common/packaging/deployment/atoc-deployment-schema)

[XBOX Game Package Manager](/build/core-features/common/packaging/xgpm)

[自动化包上传](/build/core-features/common/packaging/package-uploader)


## Related topics

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