Quick answer: Package the game with MicrosoftGame.config referencing your Partner Center identity. Run via signed MSIXVC; raw .exe lacks identity for GDK calls.

A Windows GDK title runs from Visual Studio for dev. Calls to XUserAddAsync return E_GAMEUSER_NO_DEFAULT_USER — package identity missing. Loose-running .exe doesn’t carry the manifest GDK needs.

MicrosoftGame.config

Place at project root:

<Game configVersion="1">
  <Identity Name="MyGame" Publisher="CN=12345-PublisherId" Version="1.0.0.0" />
  <ExecutableList>
    <Executable Name="MyGame.exe" TargetDeviceFamily="PC" />
  </ExecutableList>
  <ShellVisuals DefaultDisplayName="My Game" ... />
</Game>

Identity must match what’s registered in Partner Center for your title.

Package via makepkg

makepkg.exe pack /v /f layout.xml /d . /pd output.msixvc

Builds an MSIXVC package signed against your sandbox. Install via wdapp install output.msixvc on dev machine.

Sandbox vs Retail

For dev: use a Partner Center sandbox. xbsandbox switch sandbox <name> activates it. Your identity must match the sandbox’s registered title.

For retail: same identity, signed against retail certs. Production-only Live API calls.

Loose-Run Limitations

Some GDK APIs work without packaging (basic file I/O, render). Anything touching Live/Identity (XUser*, XSaveFiles, XAchievements*) requires the package context.

For dev iteration, use “Whole package run” from VS — runs the packaged app under debugger.

Verifying

Run packaged. XUserAddAsync returns S_OK. User profile loads. Live calls succeed. Logs show package identity matches manifest.

“GDK Live needs package identity. Run loose for early dev, package for Live-touching code.”

For CI builds, automate makepkg in your build pipeline — manual packaging slows iteration but is the only way to test Live integrations.