Package a WPF desktop app as a repo-buildable per-user MSI with WiX SDK
Use this when a Windows desktop app needs a real .msi artifact, must install without admin elevation, and the repo does not already have an installer project.
WebApp, overwrite the published WebApp folder with the real built dist output before packaging so installed bits do not fall back to placeholder UI.perUser and install under a user-writable path such as %LocalAppData%\Programs\{Product}.HKCU key paths) so the installer stays non-admin.obj\desktop-publish\*.runtimeconfig.json for the expected runtimeOptions.tfm..msi, do not rely on Compressed="yes" alone—set <MediaTemplate EmbedCab="yes" /> so WiX embeds cab1.cab into the MSI instead of writing a sidecar cabinet. Validate by checking the release folder has no external .cab and, if needed, confirm the MSI Media.Cabinet value is #cab1.cab..ico and reuse that exact file everywhere: WPF <ApplicationIcon> for the built .exe, Window.Icon for taskbar/Alt+Tab/native shell pickup, any custom titlebar image bound to Window.Icon, and WiX <Icon> + ARPPRODUCTICON/shortcut Icon so installer and uninstall surfaces stay consistent with the shipped executable.src\PanelNester.WebUI\dist and installer\PanelNester.Installer\obj\desktop-publish\WebApp, then query the built MSI File table through the Windows Installer COM API to confirm every current dist asset filename is present in the package.installer\PanelNester.Installer\PanelNester.Installer.wixprojinstaller\PanelNester.Installer\Product.wxsdotnet build .\installer\PanelNester.Installer\PanelNester.Installer.wixproj -c Release -nologoinstaller\PanelNester.Installer\obj\desktop-publish\PanelNester.Desktop.runtimeconfig.jsonWebApp content with the real web buildProgram Files for a supposedly per-user MSI