winapp-maui

Package and sign .NET MAUI Windows apps with winapp using the resizetizer-generated manifest.

1.2k|74|Updated Jul 30, 2025
One-click install
npx skills add https://github.com/microsoft/winappCli --skill winapp-maui
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: winapp-maui
Source: https://github.com/microsoft/winappCli/tree/main/plugins/winapp/skills/winapp-maui
Command: npx skills add https://github.com/microsoft/winappCli --skill winapp-maui

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

Packaging a .NET MAUI Windows app with winapp fails when you point it at the source manifest, because MAUI's resizetizer placeholders ($placeholder$) are only resolved at build time. This Skill shows you how to locate the resolved manifest and produce signed MSIX or unpackaged builds.

Core Features & Use Cases

  • Resolved Manifest Location: Identifies the resizetizer-generated Package.appxmanifest under obj<Config><TFM><RID>\resizetizer\m\ that winapp can consume.
  • Packaging & Signing Workflow: Covers dotnet publish, certificate generation with publisher matching, winapp package for signed MSIX, and winapp sign for unpackaged executables.
  • CI/CD Pipeline: Provides a GitHub Actions workflow that publishes the Windows head, signs binaries, and packs a signed MSIX per architecture.
  • Use Case: Your CI build fails with "manifest contains unresolved placeholders: $placeholder$" — this Skill explains the root cause and gives the exact publish-then-package commands to fix it.

Quick Start

Ask the AI to package and sign my .NET MAUI Windows app with winapp using the resolved resizetizer manifest after publishing for win-x64.

Frequently Asked Questions about winapp-maui

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I package a .NET MAUI Windows app with winapp?

Publish the Windows head first with dotnet publish for your target framework and RID, then run winapp package pointing --manifest at the resolved resizetizer manifest under obj\<Config>\<TFM>\<RID>\resizetizer\m\Package.appxmanifest with --executable set to your app exe.

Why does winapp package fail with unresolved $placeholder$ errors?

The error occurs because winapp was pointed at the source manifest Platforms/Windows/Package.appxmanifest, which contains MAUI resizetizer tokens. Point --manifest at the build-generated resolved manifest instead, since winapp only resolves its own $targetnametoken$ and $targetentrypoint$ tokens.

Where is the resolved MAUI Windows manifest located?

After a Windows publish, the resolved manifest is at obj\<Config>\<TFM>\<RID>\resizetizer\m\Package.appxmanifest. With WindowsPackageType=MSIX, a fully resolved AppxManifest.xml also appears under bin\<Config>\<TFM>\<RID>\.

Why does signing fail with a publisher mismatch error?

The certificate subject must exactly equal the Identity Publisher value in the resolved manifest. Edit Publisher="CN=..." in the source Platforms\Windows\Package.appxmanifest, publish again, then regenerate the cert with winapp cert generate --manifest.

Can I build a signed MAUI MSIX in GitHub Actions?

Yes. Install the maui-windows workload, use microsoft/setup-winapp, restore a PFX from a base64 secret, publish the Windows head per RID, sign executables with winapp sign, then pack with winapp package using the resizetizer manifest path.