Make package (makepkg2.exe)

Creates app packages, uploads packages to Partner Center, and performs related packaging operations. makepkg2 supports both MSIXVC (v1) and MSIXVC2 package formats. Use the /msixvc2 flag to generate packages in the MSIXVC2 format.

makepkg2 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.
  • localize—Generates a Resources.pri file based on content on disk.
  • appdata—Builds application metadata (appdata.bin) from an AppxManifest.xml file.

pack

Creates a new app package from files on disk.

makepkg2 pack [options]

Sample usage:

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

Options

Option Description
/msixvc2 Generate a package in the MSIXVC2 package format. Without this flag, an MSIXVC (v1) package is generated.
/d <sourcedir> (Required) Specifies the source directory that contains the content to be packaged.
/pd <destinationdir> (Required) Specifies the destination directory where the generated package is placed.
/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: Automatic (default), None. Automatic uses Brotli for MSIXVC2 packages and no compression for XVC/MSIXVC (v1) packages.
/pc Generate 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 be embedded in the package.
/l Encrypts the package with a unique content license.
/lk <key.lekb> Encrypts the package with a content license using a specified key file. Use genkey to generate the key file.
/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 (XVC1 only).
/priorpackage <OldPackage.msixvc> Specifies the XVC or MSIXVC package file from a prior pack operation. Used for content update size comparison.
/loggable Suppresses output containing control characters that aren't suitable for being written to a log file.
/symbolpaths <symbolpaths> Specifies additional paths for symbol resolution lookup during symbol bundling. Paths are specified as a semicolon-delimited list.
/skipsymbolbundling Specifies that the symbol bundling step should be skipped.
/skipvalidation Specifies that the validation step should be skipped.
/validationcritical Specifies that failures in Submission Validator should be treated as critical failures for the MakePkg process.
/openvalidationlog Specifies that the Submission Validator log file should be automatically opened in the default application for opening XML files after validation runs.
/validationlanguage <lang> Specifies an additional language for building the Submission Validator log file.
/validationpath <path> Specifies the path to use for loading SubmissionValidator.dll.
/updatesubval Downloads the latest version of SubmissionValidator.dll automatically from https://aka.ms/currentsubvalzip before running validation, unless the current version already matches. Can be used with /validationpath to specify a custom download location. If the download fails, validation continues with the current version.

Remarks

By default, makepkg2 pack encrypts the package by using a well-known encryption key recognized by all development kits for testing purposes. These packages aren't cryptographically protected.

For additional protection of the uploaded package, XVC and MSIXVC (v1) packages can optionally use /l or /lk encryption modes. /l packages can't be installed on a devkit or PC for testing before upload. /lk packages can only be installed on a devkit for testing before upload. Regardless of the upload encryption mode, the Xbox service always encrypts the package for distribution with Microsoft managed encryption keys.

MSIXVC2 packages do not use client-side upload encryption. The Xbox service handles all encryption for distribution.

To generate a key file for use with /lk, use the genkey command.


upload

Uploads a specified package to Partner Center. The upload command can also package from loose files and upload in a single operation when /d is specified.

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

The EKB file and SubmissionValidator log file should be in the same directory as the package and are uploaded automatically. If a Symbol Bundle is present, it's also uploaded. The StoreId is extracted from the package but can optionally be provided if the package was generated without a StoreId.

makepkg2 upload [options]

Sample usage (upload pre-built package):

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

Sample usage (package and upload from loose files):

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

Options

Package source options

Option Description
/pd <package_directory> The directory where the package resides. If there's more than one package at this location, specify the full package file name instead of the directory name.
/d <sourcedir> Specifies the source directory that contains the content to be packaged. When specified, the upload command packages the content and uploads it in a single operation.
/f <mapfile> Specifies the mapping file to use for packaging (used with /d).
/msixvc2 Generate a package in the MSIXVC2 package format (used with /d).
/compress <method> Compresses the output. Available methods: Automatic (default), None. Automatic uses Brotli for MSIXVC2 packages and no compression for XVC/MSIXVC (v1) packages.
/pc Generate a package for use on PC (used with /d).
/productid <productid> Specifies the product ID to which this package belongs.

Destination options

Option Description
/storeid <storeId> The Store ID to use for the package. If not specified, the Store ID is extracted from the package.
/branch <branch> The branch to upload the package to. Defaults to main if neither branch nor flight is specified.
/flight <flight> The flight to upload the package to. Can't be used if a branch is specified.
/market <market> The market to upload the package to. Defaults to default.
/disclayout <path> An optional path to a disc layout file if the package will be shipped on disc and requires more than one disc.

Authentication options

Option Description
/auth <method> The authentication method to use. Default: CacheableBrowser. Multiple authentication methods are available only for MSIXVC2 uploads. XVC and MSIXVC (v1) uploads can only use CacheableBrowser. For advanced authentication with those formats, use PackageUploader. For details, see Authentication methods.
/tenantid <tenantId> The tenant to upload the package to. If not specified, the user's default tenant is used.
/clientid <clientId> The client ID (application ID) to use for authentication. Required for ManagedIdentity, ClientCertificate, and ClientSecret authentication methods.
/clientsecret <secret> The client secret to use for authentication. Requires /auth ClientSecret.
/certthumbprint <thumbprint> The certificate thumbprint to use for ClientCertificate authentication.
/certstore <store> The certificate store name (for example, My). Defaults to My.
/certlocation <location> The certificate location (for example, CurrentUser or LocalMachine). Defaults to CurrentUser.
/certpassword <password> The password for the certificate file (PFX/PKCS12). Only required if using a password-protected certificate file.
/resourceid <resourceId> The Azure resource ID for ManagedIdentityFederated authentication. Required when using /auth ManagedIdentityFederated.

Validation and symbol options

Option Description
/skipvalidation Specifies that the validation step should be skipped.
/validationcritical Specifies that failures in Submission Validator should be treated as critical failures.
/validationlanguage <lang> Specifies an additional language for building the Submission Validator log file.
/validationpath <path> Specifies the path to use for loading SubmissionValidator.dll.
/updatesubval Downloads the latest version of SubmissionValidator.dll before running validation. See pack for details.
/symbolpaths <symbolpaths> Specifies additional paths for symbol resolution lookup during symbol bundling. Semicolon-delimited list.
/skipsymbolbundling Specifies that the symbol bundling step should be skipped.

Authentication methods

The following authentication methods are available for the upload command.

Method Description
CacheableBrowser Opens a browser for interactive sign-in and caches credentials for subsequent uploads. This is the default.
Browser Opens a browser for interactive sign-in without caching credentials.
AzureCli Uses Azure CLI credentials. Useful when already authenticated via az login.
AzurePipelines Uses the Azure Pipelines service connection. Ideal for Azure DevOps CI/CD pipelines.
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 methods in sequence.

genkey

Generates an encryption key file (LEKB) for use with the pack /lk option.

makepkg2 genkey [options]

Options

Option Description
/ekb <ekbfile> Specifies the path to save the generated LEKB file. The .lekb extension is recommended to distinguish it from the .ekb file generated by makepkg pack.

genid

Converts between a Product ID GUID and a Store ID.

makepkg2 genid [options]

Options

Option Description
/storeid <storeId> Specifies the Store ID to convert.
/productid <productId> Specifies a previously generated Product ID GUID to convert.

genmap

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

makepkg2 genmap /f <mapfile> /d <contentdirectory>

Options

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

validate

Runs the validation steps for creating an application package without creating the package. This is useful for verifying that your content and configuration are correct before committing to a full pack operation.

makepkg2 validate [options]

The validate command accepts the same options as pack.


localize

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

makepkg2 localize /d <sourcedir> [options]

Options

Option Description
/d <sourcedir> (Required) Specifies the source directory that contains the content to be packaged.
/resw <reswdir> Optional directory path relative to the root directory that contains RESW files if they aren't in the immediate root directory.
/pd <outputdir> Optional output directory for the resulting Resources.pri file. If not specified, the file is placed in the content directory.
/t <tempdir> Optional directory for converting the Resources.pri contents to an XML format.
/gc <gameconfigpath> Optional path to the MicrosoftGame.config file if it isn't located at the base of the content directory or has a name other than MicrosoftGame.config.

appdata

Builds application metadata (appdata.bin) based upon a valid AppxManifest.xml file.

makepkg2 appdata [options]

Options

Option Description
/f <appmanifest> Specifies the path to the AppxManifest.xml file.
/d <appmanifestdir> Specifies a directory containing the AppxManifest.xml file.
/pd <outputdir> Specifies the output location for the generated file. Default is next to the AppxManifest.xml file.
/nocrashdump Specifies that the application opts out of automatic generation and upload of crash dumps in case of a fault.

Differences from makepkg

makepkg2 is the successor to makepkg and includes the following additions:

Feature makepkg makepkg2
MSIXVC2 format Not supported /msixvc2 flag
Upload to Partner Center Basic (wraps PackageUploader) Built-in upload command
Compression Not supported /compress option
Authentication for upload CacheableBrowser only 10 authentication methods

Existing makepkg commands (pack, genmap, genid, genkey, validate, localize, appdata) work the same way in makepkg2. Scripts that use makepkg commands can switch to makepkg2 without modification.

Note

For MSIXVC (v1) packaging, both makepkg and makepkg2 are supported. For MSIXVC2 packaging, makepkg2 is required.

See also

MSIXVC2 packaging overview
Getting started with MSIXVC2 for PC
Make package (makepkg.exe)
Deployment Package Schema
Xbox Game Package Manager
Automating package uploading