使用 winapp CLI 打包 WPF 项目并发布到微软商店
第一阶段:环境准备与项目配置
在开始打包之前,你需要确保开发环境和项目已正确配置。
1、安装 winapp CLI
winapp CLI 是微软推出的命令行工具,旨在为 Windows 应用开发者提供统一、简洁的开发体验,整合了应用打包(MSIX)、证书管理、清单生成等核心功能。推荐的安装方式是使用 Windows 包管理器 WinGet:
winget install Microsoft.winappcli --source winget


你也可以从 GitHub Releases 手动下载或通过 NPM 安装(适用于 Electron 项目)。
2、配置 WPF 项目以支持现代打包
虽然 winapp CLI 可以处理打包,但你的 WPF 项目本身需要支持 MSIX 打包。这通常意味着:
目标框架:建议将项目迁移或创建为面向 .NET Core 3 或更高版本(如 .NET 8),这为现代化和 MSIX 打包打开了新的可能性。在项目文件(.csproj)中,确保 TargetFramework 包含 Windows 目标框架名字对象,例如:
<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
运行时标识符:添加 RuntimeIdentifiers 以支持多架构打包。
Windows App SDK 集成(可选但推荐):如果你想在 WPF 应用中使用最新的 Windows API(如通知、资源管理等),可以安装 Microsoft.WindowsAppSDK NuGet 包并配置项目以初始化运行时。这能增强应用功能,但并非打包到商店的强制要求。
第二阶段:使用 winapp CLI 进行打包
这是将你的 WPF 应用转换为可分发 MSIX 包的核心步骤。
1、初始化 winapp 配置
在你的 WPF 项目根目录下运行以下命令,生成配置文件 winapp.json:
winapp init
这个配置文件用于定义应用名称、版本、入口点(EXE 路径)、发布者等元数据。你需要根据你的项目输出路径进行编辑。



2、创建调试身份(开发阶段可选但关键)
许多需要 “包身份”(Package Identity)的 Windows API(如后台任务、推送通知)在调试时要求应用具有身份。传统方式需要完整打包,而 winapp CLI 提供了革命性的简化方案:
winapp create-debug-identity
此命令会为你的 EXE 注入临时身份,使你在开发阶段就能调用受保护的 API,而无需修改代码或重新编译。
[dlgcy] 之前执行程序路径设置错误:

需要修改配置文件:

再次执行,错误如下:
Failed to add package identity: Failed to register sparse package: PowerShell command failed with exit code 1

3、生成 MSIX 安装包
当你准备好发布版本时,使用 pack 命令进行打包。你需要指定发布版本的输出目录以及清单文件等信息。
winapp pack .\bin\Release\net8.0-windows10.0.19041.0\ --manifest .\appxmanifest.xml --cert .\devcert.pfx
该命令会自动完成以下工作:
- 生成或使用
AppxManifest.xml(应用清单文件)。 - 创建 MSIX 包。
- 使用指定的开发证书(可通过
winapp cert命令管理)对包进行签名。
最终会输出.msix或.msixbundle文件,这是提交到微软商店所需的包格式。
关于证书的重要提示:如果选择跳过包签名,生成的安装包将无法正常安装,系统会提示证书验证错误。因此,务必使用有效的证书进行签名。对于最终发布到商店,微软会提供补充签名,但本地测试和打包需要一个有效的开发证书。
[dlgcy] 依旧出错(看上去是版本号错误?):

将版本号改为四位的(2.1.0.0)后再次执行,成功了:

生成了 .msix 文件:

直接双击运行提示证书问题:

可双击 devcert.pfx 进行证书导入:


需要输入密码(password):

选择证书存储位置(此处错误,后面有纠正):



不过导入这个证书后,msix 打开还是之前的错误。
原来是选择证书存储那一步需要 将所有的证书都放入 受信任的根证书颁发机构 中:


此时再双击运行 msix 程序就允许安装了:

安装中:

安装完成(但有报错):

查看对应文件夹,发现是找错了路径(但是这个多余的路径在打包时又是需要的):

因为打包时的命令中已经指定了路径:
winapp pack .\bin\Debug\net8.0-windows\ --manifest .\appxmanifest.xml --cert .\devcert.pfx
所以清单文件中不需要再指定路径(这样的话,之前 winapp create-debug-identity 命令可能需要指定路径参数):

再次打包,重新安装(reinstall),因为版本号相同,报错了:

提升版本号后再次打包,安装时按钮文字变为了 Update:

更新后,直接就自动打开了:

第三阶段:提交应用到微软商店
打包完成后,你需要通过微软的合作伙伴中心将应用提交到商店。
https://partner.microsoft.com/zh-cn/dashboard/apps-and-games/overview
1、注册开发者账户
在提交之前,你需要在合作伙伴中心注册一个开发者账户。账户分为个人(免费)和公司(约 99 美元一次性注册费)两种类型,根据你的身份进行选择。
2、创建并完成应用提交
保留应用名称:首先,在合作伙伴中心为你的应用保留一个唯一的名称,最长可保留 3 个月。


开始提交:保留名称后,创建新的应用提交草稿。你需要逐步完成多个选项卡的信息填写:
- 定价和可用性:设置应用价格、销售市场以及是否提供免费试用。
- 属性:定义应用类别、子类别和系统要求。
- 年龄分级:完成问卷以获取年龄分级。
- 程序包:这是关键步骤。上传你使用 winapp CLI 生成的
.msix或.msixbundle文件。 - Microsoft Store 一览:提供应用描述、屏幕截图、图标等,这些将显示在商店的产品详情页。
- 提交选项:可选的认证说明和发布计划。

上传之前生成的 msix 文件:

有点小错误需要修改:

修改后重新打包:

再次上传还是有错误:

按要求修改了包名和发布者名称后,需要重新生成 pfx 文件(winapp cert generate):

再次打包:

再次上传,只剩下一个错误了:
声明的包依赖项不可用: Microsoft.WindowsAppRuntime.1.8,Neutral,Universal

将项目属性中的生成目标平台改为 x64:

给清单文件中的 Identity 项添加 ProcessorArchitecture="x64" :
[Github Copilot] 你这个报错里关键是 Neutral,Universal:这通常表示你上传的包在清单里被识别成 “neutral 架构包”,商店会去找 neutral 的 Microsoft.WindowsAppRuntime.1.8 框架包,但商店端没有这个 neutral 框架包,于是就报 “依赖项不可用”。
我在你工作区里把 appxmanifest.xml 的 <Identity> 补上了:
• ProcessorArchitecture=”x64″
这样生成出来的 MSIX 清单会明确是 x64,而不是 Neutral。

再次打包后上传,可以了:

再改一下清单文件,加入中文语言;然后程序使用 Release 编译和打包(大小减小很多):
winapp pack .\bin\Release\net8.0-windows\ --manifest .\appxmanifest.xml --cert .\devcert.pfx
删除之前的包,上传新包:

3、通过认证并发布
完成所有信息填写后,提交应用进行认证。微软会进行安全测试、技术合规性测试和内容检查,此过程最多可能需要 3 个工作日。认证通过后,你的应用就会发布到微软商店,供用户下载安装。


一天后,提示认证失败了:

点击 “查看报表” 后信息如下:

翻译一下,是两个小问题:

生成式 AI 声明按照要求勾选即可,至于磁贴图片,好像需要在项目中修改:
https://learn.microsoft.com/en-us/windows/uwp/app-resources/images-tailored-for-scale-theme-contrast
也就是清单文件里指定的这些图片,还是默认图片,所以没通过认证:

使用 AiPy 将 logo 图片修改为各种尺寸:

然后重新打包程序,程序包可用解压软件打开查看:

最后再重新上传、提交认证。
不过网页上的 Store 一览 中也能上传磁贴图标(优先级更高),后面如果还有问题就从这里上传吧:

又过了一个工作日左右,认证通过了:

现在就有相关链接了:
-
Web Store URL:https://apps.microsoft.com/detail/9P2MZQDJS7K2
也可以在微软应用商店(Microsoft Store)中搜索应用名称(MultiAIBrowser、多重 AI 浏览器)进行安装使用了:



安装好即可打开使用了,而且这种 msix 版的应用,没有 打开所在文件夹 功能,对于开发者的成果保护有一定的效果:

在任务管理器中也查看不了属性:

最后,欢迎大家来使用这个新上架的 多重 AI 浏览器(MultiAIBrowser)。
总结
使用 winapp CLI 打包和发布 WPF 应用到微软商店,是一条从开发、调试到分发的现代化路径。它通过命令行工具简化了 MSIX 打包的复杂性,并与官方的商店发布流程无缝衔接。务必注意证书签名和项目配置等关键细节,以确保流程顺利进行。

发表评论