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.