Packaging: ClickOnce & MSIX
The same project, two more output shapes — plus code signing. All under Beep.Installer.Core/Packaging.
Track B — ClickOnce
/PUBLISH=<project.bsetup> lays out a ClickOnce publish folder: application files renamed to *.deploy, an application manifest and a deployment manifest, optional signing via mage/signtool, and a deploymentProvider (update URL) for auto-update.
Beep.Installer.exe /PUBLISH=MyApp.bsetup /OUT=publish /UPDATEURL=https://host/app
Key writers: ApplicationManifestWriter, DeploymentManifestWriter, PublishStager, plus the runtime UpdateChecker/UpgradeEngine for the on-launch update flow. (For new apps, the modern Updates domain supersedes ClickOnce updating.)
Track C — MSIX
/BUILD=<project> /FORMAT=msix stages a flat payload, generates AppxManifest.xml (identity, capabilities, applications, visual assets), synthesizes tiles/icons from the setup icon, and packages via MakeAppx. A StoreReadinessChecker flags Store-association issues. Where MakeAppx rejects a minimal manifest, the build reports the precise error and points at the staging folder rather than pretending success.
Code signing
Signing/SignTool locates signtool.exe on PATH or in the Windows Kits, and signs with SHA-256 + an RFC 3161 timestamp. An unsigned build emits a prominent SmartScreen warning; /REQUIRESIGNED turns that into a hard CI failure.