Make package (makepkg.exe)

Creates app packages, uploads packages to Partner Center, and performs related packaging operations. makepkg supports the XVC, MSIXVC, and MSIXVC2 package formats. Use the /msixvc2 option to generate packages in the MSIXVC2 format.

makepkg <command> [options]

Global options

Option Description
/v Enables verbose output to the console.
/?, /h Shows help and usage information.

Commands

  • pack - Creates a new app package from files on disk.
  • upload - Uploads a package or a directory of files to Partner Center.
  • genkey - Generates an encryption key for use with pack /lk.
  • genid - Converts between a Product ID GUID and a Store ID.
  • genmap - Generates a mapping XML file based on content on disk.
  • validate - Runs validation without creating a package.
  • updatesubval - Updates SubmissionValidator.dll without running another operation.
  • localize - Generates a Resources.pri file based on content on disk.

pack

Creates a new app package from files on disk.

makepkg pack [options]

Sample usage:

makepkg pack /msixvc2 /f layout.xml /d <sourcedir> /pc /pd <destinationdir>

Options

Option Description
/msixvc2 Generates a package in the MSIXVC2 package format. Without this option, an MSIXVC package is generated.
/updcompat 3 Uses subfile content update granularity for XVC and MSIXVC packages. The only supported value is 3.
/d <sourcedir> (Required) Specifies the source directory that contains the content to package.
/pd <destinationdir> (Required) Specifies the destination directory for the generated package.
/f <mapfile> Specifies the mapping file to use for packaging. If omitted, a default single-chunk layout is generated.
/compress <method> Compresses the output. Available methods are Automatic (default) and None. Automatic uses Brotli for MSIXVC2 packages and no compression for XVC or MSIXVC packages.
/pc Generates a package for use on PC.
/contentid <contentid> Specifies the content ID to which this package belongs.
/gameos <gameos> Specifies the game OS file to embed in the package.
/l Encrypts the package with a unique content license. When submitting an XVC or MSIXVC package to certification, use /l or /lk unless the Certification team directs you otherwise.
/lk <key.lekb> Encrypts the package with a content license by using a specified key file. Use genkey to generate the key file. When submitting an XVC or MSIXVC package to certification, use /l or /lk unless the Certification team directs you otherwise.
/productid <productid> Specifies the product ID to which this package belongs.
/maxencryptionfragments <count> Specifies the number of encryption fragments to reserve in the package metadata. This option applies only to XVC and MSIXVC packages.
/priorpackage <OldPackage.msixvc> Specifies an XVC, MSIXVC, or MSIXVC2 package from a prior pack operation for content update size comparison.
/loggable Suppresses output containing control characters that aren't suitable for a log file.
/symbolpaths <symbolpaths> Specifies additional paths for symbol resolution lookup during symbol bundling. Separate paths with semicolons.
/skipsymbolbundling Skips symbol bundling.
/skipvalidation Skips Submission Validator. Don't use this option for builds that might be submitted to certification.
/validationcritical Treats Submission Validator failures as critical failures for the makepkg process.
/openvalidationlog Opens the Submission Validator log file in the default XML application after validation.
/validationlanguage <lang> Specifies an additional language for the Submission Validator log file.
/validationpath <path> Specifies the directory from which to load SubmissionValidator.dll.
/updatesubval Downloads the latest SubmissionValidator.dll before validation unless the installed version is current. Use /validationpath to select a different location. If the update fails, packaging or validation continues with the installed DLL. To update without another operation, use updatesubval.

Remarks

By default, makepkg pack encrypts XVC or MSIXVC packages by using a well-known encryption key recognized by all development kits for testing. These packages aren't cryptographically protected.

For additional upload protection, XVC and MSIXVC packages can use /l or /lk. Packages that use /l can't be installed on a development kit or PC before upload. Packages that use /lk can be installed on a development kit before upload. Regardless of the upload encryption mode, the XBOX service encrypts the package for distribution with Microsoft-managed encryption keys.

MSIXVC2 packages don't use client-side upload encryption. The XBOX service handles encryption for distribution.

For information about the mapping file schema, see Deployment package schema.

upload

Uploads a package to Partner Center. For MSIXVC2 only, the upload command can also package loose files and upload them in one operation when /d is specified. Loose file upload requires the /msixvc2 option.

If a branch or flight isn't specified, the package is uploaded to the main branch.

The EKB file and Submission Validator log file should be in the same directory as the package and are uploaded automatically. A symbol bundle is also uploaded when present. The Store ID is extracted from the package, but it can be provided when the package was generated without one.

makepkg upload [options]

Sample usage (upload a prebuilt package):

makepkg upload /pd <package_directory> /branch <branch> /auth CacheableBrowser

Sample usage (package and upload loose files):

makepkg upload /d <sourcedir> /msixvc2 /pc /branch <branch>

Package source options

Option Description
/pd <package_directory> Specifies the package file or its directory. If the directory contains more than one package, specify the full package file name.
/d <sourcedir> Specifies the source directory to package and upload in one operation.
/f <mapfile> Specifies the mapping file to use with /d.
/msixvc2 Generates an MSIXVC2 package when used with /d.
/compress <method> Compresses the output. Available methods are Automatic (default) and None.
/pc Generates a PC package when used with /d.
/productid <productid> Specifies the product ID to which this package belongs.

Destination options

Option Description
/storeid <storeId> Specifies the Store ID. If omitted, the Store ID is extracted from the package.
/branch <branch> Specifies the branch to upload to. Defaults to main if neither a branch nor flight is specified.
/flight <flight> Specifies the flight to upload to. This option can't be used with /branch.
/market <market> Specifies the market to upload to. Defaults to default.
/disclayout <path> Specifies a disc layout file for a package that ships on more than one disc.

Authentication options

Option Description
/auth <method> Specifies the authentication method. The default is CacheableBrowser. Multiple methods are available only for MSIXVC2 uploads. XVC and MSIXVC uploads can use only CacheableBrowser. For advanced authentication with those formats, use Package Uploader.
/tenantid <tenantId> Specifies the tenant to upload to. If omitted, the user's default tenant is used.
/clientid <clientId> Specifies the client ID. Required for ManagedIdentity, ClientCertificate, and ClientSecret.
/clientsecret <secret> Specifies the client secret. Requires /auth ClientSecret.
/certthumbprint <thumbprint> Specifies the certificate thumbprint for ClientCertificate.
/certstore <store> Specifies the certificate store name. Defaults to My.
/certlocation <location> Specifies the certificate location, such as CurrentUser or LocalMachine. Defaults to CurrentUser.
/certpassword <password> Specifies the password for a password-protected certificate file.
/resourceid <resourceId> Specifies the Azure resource ID for ManagedIdentityFederated.

Validation and symbol options

Option Description
/skipvalidation Skips Submission Validator.
/validationcritical Treats Submission Validator failures as critical failures.
/validationlanguage <lang> Specifies an additional language for the Submission Validator log file.
/validationpath <path> Specifies the directory from which to load SubmissionValidator.dll.
/updatesubval Downloads the latest SubmissionValidator.dll before validation. See pack for failure behavior.
/symbolpaths <symbolpaths> Specifies additional symbol resolution paths separated by semicolons.
/skipsymbolbundling Skips symbol bundling.

Authentication methods

Method Description
CacheableBrowser Opens a browser for interactive sign-in and caches credentials. This method is the default.
Browser Opens a browser for interactive sign-in without caching credentials.
AzureCli Uses Azure CLI credentials.
AzurePipelines Uses the Azure Pipelines service connection.
ManagedIdentity Uses an Azure managed identity. Requires /clientid.
ManagedIdentityFederated Uses a federated managed identity. Requires /clientid and /resourceid.
ClientSecret Uses a client ID and secret. Requires /clientid and /clientsecret.
ClientCertificate Uses a client certificate. Requires /clientid and /certthumbprint.
Environment Uses credentials from environment variables.
Default Tries multiple authentication methods in sequence.

genkey

Generates a local escrowed key blob (LEKB) for use with pack /lk.

makepkg genkey [options]
Option Description
/ekb <ekbfile> Specifies the path for the generated LEKB file. Use the .lekb extension to distinguish it from the .ekb file generated by makepkg pack.

Provide the LEKB file to makepkg pack /lk to use a stable encryption key during package creation. This key:

  1. Allows packageutil compare to generate accurate update-size estimates.
  2. Enables secure delta uploads to Partner Center by using the same algorithm that consoles and PCs use to download content updates.
  3. Produces packages that can be installed on development kits.
  4. Uses secure encryption key material that can only be decrypted in specific environments.

The LEKB file contains lightly obfuscated encryption key material. Anyone who has both the LEKB file and the package can decrypt the package, so secure access to the file.

genid

Converts between a Product ID GUID and a Store ID.

makepkg genid [options]
Option Description
/storeid <storeId> Specifies the Store ID to convert.
/productid <productId> Specifies the Product ID GUID to convert.

genmap

Generates a mapping XML file based on content on disk. The generated file contains one chunk and can be edited to split content into multiple chunks or add Intelligent Delivery tags.

makepkg genmap /f <mapfile> /d <contentdirectory>
Option Description
/f <mapfile> Specifies the path for the generated mapping file.
/d <contentdirectory> Specifies the directory whose contents are added to the mapping file.

validate

Runs package validation without creating a package. Use this command to verify content and configuration before a full pack operation.

makepkg validate [options]

The validate command accepts the same options as pack.

updatesubval

Downloads, verifies, and installs the latest SubmissionValidator.dll without creating, validating, or uploading a package.

makepkg updatesubval [/validationpath <path>]

Options

Option Description
/validationpath <path> Specifies the directory that contains or should receive SubmissionValidator.dll. If omitted, the command checks the makepkg tool directory, followed by the %GameDK%\bin directory.

Remarks

If SubmissionValidator.dll is already the latest version, the command reports that it's current and exits successfully without downloading it. If the file is missing, the command installs it. On success, the command displays the version of SubmissionValidator.dll that's on disk.

Unlike the /updatesubval option used during packaging or validation, the standalone updatesubval command returns a nonzero exit code if the update fails. When used as an option, an update failure is non-fatal and the packaging or validation operation continues with the installed version of SubmissionValidator.dll.

localize

Generates a Resources.pri file based on content on disk.

makepkg localize /d <sourcedir> [options]
Option Description
/d <sourcedir> (Required) Specifies the source directory that contains the content to localize.
/resw <reswdir> Specifies a directory relative to the root directory that contains RESW files.
/pd <outputdir> Specifies the output directory for Resources.pri. If omitted, the file is placed in the content directory.
/t <tempdir> Specifies a temporary directory for converting Resources.pri to XML.
/gc <gameconfigpath> Specifies the MicrosoftGame.config path when the file isn't at the base of the content directory or uses another name.

For more information, see MicrosoftGame.config localization.

MSIXVC2 packaging overview
Getting started with MSIXVC2 for PC
Deployment package schema
Xbox Game Package Manager
Automating package uploading