用途:用 winapp 对 .NET MAUI Windows 应用进行打包(winapp package)与签名(winapp sign)。MAUI 不是 winapp init 框架,其 Windows 头项目自带清单和构建系统,关键是把 winapp 指向构建生成的已解析清单,而非源码清单 Platforms/Windows/Package.appxmanifest,否则会报“manifest contains unresolved placeholders: $placeholder$”。不要为迁就 winapp 而改源码清单中的占位符,obj/bin 下生成文件每次构建都会重写,也不要手动编辑。
主要能力:1) 发布 Windows 头项目;2) 用生成的 resizetizer 清单打包签名 MSIX;3) 对未打包(WindowsPackageType=None)构建就地签名;4) 在 GitHub Actions 中构建并产出已签名 MSIX 或未打包构建。清单路径为 obj<Config><TFM><RID>\resizetizer\m\Package.appxmanifest(两种工作流均可用);默认 MSIX 工作流还会生成 bin...\AppxManifest.xml。均为按 RID 生成,须先发布对应架构。
用法要点:先 dotnet publish Windows 头,指定 -f/-r,例如 -p:WindowsPackageType=None -p:SelfContained=true -p:WindowsAppSDKSelfContained=true。签名证书主题须与清单 Identity.Publisher 完全一致,否则签名报 publisher mismatch;可用 winapp cert generate --manifest <已解析清单> --if-exists overwrite 生成开发证书。打包示例:winapp package .\publish\win-x64 --manifest $manifest --executable MyApp.exe --cert .\devcert.pfx --cert-password password --output .\artifacts\MyApp-win-x64.msix。签名未打包构建:winapp sign .\publish\win-x64\MyApp.exe .\devcert.pfx --password password(注意 sign 用位置参数证书路径加 --password,package 用 --cert/--cert-password)。WindowsPackageType=None 时需显式传 --manifest,因发布目录无 AppxManifest.xml。多架构分别按其发布目录和清单打包,或传两个目录生成 .msixbundle。可用 -q/--quiet 减少日志;证书勿提交仓库。本地验证可运行 .\scripts\test-samples.ps1 -Samples maui-app,仓库含 samples\maui-app 示例。
限制:未提供收费、价格与平台支持等事实;自签名证书有效但不为其他用户建立 SmartScreen 信誉。