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

# 建立套件 (makepkg.exe)

> 建立套件 (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) - 在產品識別碼 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>` | 指定此套件所屬的內容識別碼。 |
| `/gameos <gameos>` | 指定要內嵌在套件中的遊戲 OS 檔案。 |
| `/l` | 使用唯一的內容授權加密套件。將 XVC 或 MSIXVC 套件提交認證時，除非認證小組另有指示，否則請使用 `/l` 或 `/lk`。 |
| `/lk <key.lekb>` | 使用指定的金鑰檔案，以內容授權加密套件。請使用 `genkey` 產生金鑰檔案。將 XVC 或 MSIXVC 套件提交認證時，除非認證小組另有指示，否則請使用 `/l` 或 `/lk`。 |
| `/productid <productid>` | 指定此套件所屬的產品識別碼。 |
| `/maxencryptionfragments <count>` | 指定要在套件中繼資料中保留的加密片段數目。此選項僅適用於 XVC 和 MSIXVC 套件。 |
| `/priorpackage <OldPackage.msixvc>` | 指定先前封裝作業產生的 XVC、MSIXVC 或 MSIXVC2 套件，用於比較內容更新大小。 |
| `/loggable` | 隱藏包含不適合記錄檔之控制字元的輸出。 |
| `/usepublisherkey <publisherkeyname>` | 使用由 `publisherkeyname` 識別的預先安裝 CNG 金鑰，簽署 XVC 或 MSIXVC Publisher Content 套件，或將發行者公開金鑰內嵌至上層基礎遊戲套件。僅適用於 XVC 和 MSIXVC。 |
| `/publisherkeyprovider <publisherkeyprovider>` | 指定保存 `/usepublisherkey` 所指名之發行者金鑰的 CNG 金鑰儲存提供者。若未指定，則會使用 Microsoft Software Key Storage Provider。僅適用於 XVC 和 MSIXVC。 |
| `/usepublishercert <thumbprint\|certificate.cer>` | 指定用於簽署 MSIXVC2 Publisher Content 套件或從上層套件授權該套件之憑證的指紋或 .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 服務會處理散發所需的加密。

如需對應檔案結構描述的相關資訊，請參閱[部署套件結構描述](/zh-TW/build/core-features/common/packaging/deployment/atoc-deployment-schema)。

## upload

將套件上傳至 Partner Center。僅針對 MSIXVC2，指定 `/d` 時，`upload` 命令也可以在一次作業中封裝鬆散檔案並加以上傳。鬆散檔案上傳需要 `/msixvc2` 選項。

如果未指定分支或正式發行前小眾測試版本 (flight)，套件會上傳至 `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>` | 指定此套件所屬的產品識別碼。 |

### 目的地選項

| 選項 | 說明 |
| - | - |
| `/storeid <storeId>` | 指定 Store ID。若省略，則會從套件中擷取 Store ID。 |
| `/branch <branch>` | 指定要上傳至的分支。如果未指定分支或正式發行前小眾測試版本，則預設為 `main`。 |
| `/flight <flight>` | 指定要上傳至的正式發行前小眾測試版本。此選項不可與 `/branch` 一起使用。 |
| `/market <market>` | 指定要上傳至的市場。預設為 `default`。 |
| `/disclayout <path>` | 為以多張光碟出貨的套件指定光碟配置檔案。 |

### 驗證選項

| 選項 | 說明 |
| - | - |
| `/auth <method>` | 指定驗證方法。預設為 `CacheableBrowser`。只有 MSIXVC2 上傳可使用多種方法。XVC 和 MSIXVC 上傳只能使用 `CacheableBrowser`。若要對這些格式使用進階驗證，請使用 [Package Uploader](/zh-TW/build/core-features/common/packaging/package-uploader)。 |
| `/tenantid <tenantId>` | 指定要上傳至的租用戶。若省略，則會使用使用者的預設租用戶。 |
| `/clientid <clientId>` | 指定用戶端識別碼。`ManagedIdentity`、`ClientCertificate` 和 `ClientSecret` 需要此選項。 |
| `/clientsecret <secret>` | 指定用戶端密碼。需要 `/auth ClientSecret`。 |
| `/certthumbprint <thumbprint>` | 指定 `ClientCertificate` 的憑證指紋。 |
| `/certstore <store>` | 指定憑證存放區名稱。預設為 `My`。 |
| `/certlocation <location>` | 指定憑證位置，例如 `CurrentUser` 或 `LocalMachine`。預設為 `CurrentUser`。 |
| `/certpassword <password>` | 指定受密碼保護之憑證檔案的密碼。 |
| `/resourceid <resourceId>` | 指定 `ManagedIdentityFederated` 的 Azure 資源識別碼。 |

### 驗證與符號選項

| 選項 | 說明 |
| - | - |
| `/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` | 使用用戶端識別碼和密碼。需要 `/clientid` 和 `/clientsecret`。 |
| `ClientCertificate` | 使用用戶端憑證。需要 `/clientid` 和 `/certthumbprint`。 |
| `Environment` | 使用環境變數中的認證。 |
| `Default` | 依序嘗試多種驗證方法。 |

## genkey

產生搭配 `pack /lk` 使用的本機託管金鑰 Blob (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

在產品識別碼 GUID 與 Store ID 之間轉換。

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

| 選項 | 說明 |
| - | - |
| `/storeid <storeId>` | 指定要轉換的 Store ID。 |
| `/productid <productId>` | 指定要轉換的產品識別碼 GUID。 |

## genmap

根據磁碟上的內容產生對應 XML 檔案。產生的檔案包含一個區塊，您可以編輯該檔案，將內容分割成多個區塊或新增 Intelligent Delivery 標記。

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

| 選項 | 說明 |
| - | - |
| `/f <mapfile>` | 指定所產生對應檔案的路徑。 |
| `/d <contentdirectory>` | 指定其內容要新增至對應檔案的目錄。 |

## validate

執行套件驗證但不建立套件。使用此命令可在完整封裝作業之前驗證內容和設定。

```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 當地語系化](/zh-TW/build/core-features/common/game-config/MicrosoftGameConfig-Localization)。

## 相關主題

[MSIXVC2 封裝概觀](/zh-TW/build/core-features/common/packaging/overviews/packaging-msixvc2-overview)

[開始使用適用於 PC 的 MSIXVC2](/zh-TW/build/core-features/common/packaging/overviews/packaging-getting-started-for-PC-msixvc2)

[部署套件結構描述](/zh-TW/build/core-features/common/packaging/deployment/atoc-deployment-schema)

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

[自動化套件上傳](/zh-TW/build/core-features/common/packaging/package-uploader)


## Related topics

- [Make package (makepkg.exe)](/zh-CN/build/core-features/common/packaging/deployment/makepkg.md)
- [패키지 만들기(makepkg.exe)](/ko/build/core-features/common/packaging/deployment/makepkg.md)
- [packageutil.exe](/build/core-features/common/packaging/deployment/packageutil.md)
