使用 winapp CLI 打包 WPF 项目并发布到微软商店

使用 winapp CLI 打包 WPF 项目并发布到微软商店

使用 winapp CLI 打包 WPF 项目并发布到微软商店

独立观察员 2026年3月2日

AI 辅助创作:ima (DS V3.2)、GithubCopilot(GPT)
 
要使用 winapp CLI 打包 WPF 项目并发布到微软商店,整个过程可以分为三个主要阶段:环境准备与项目配置使用 winapp CLI 打包以及提交到微软商店。以下是详细的步骤指南。
 

第一阶段:环境准备与项目配置

在开始打包之前,你需要确保开发环境和项目已正确配置。

 

1、安装 winapp CLI

winapp CLI 是微软推出的命令行工具,旨在为 Windows 应用开发者提供统一、简洁的开发体验,整合了应用打包(MSIX)、证书管理、清单生成等核心功能。推荐的安装方式是使用 Windows 包管理器 WinGet:

winget install Microsoft.winappcli --source winget

 

getImage-2

getImage

 

你也可以从 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 路径)、发布者等元数据。你需要根据你的项目输出路径进行编辑。

getImage-1

getImage-3

getImage-4

 

2、创建调试身份(开发阶段可选但关键)

许多需要 “包身份”(Package Identity)的 Windows API(如后台任务、推送通知)在调试时要求应用具有身份。传统方式需要完整打包,而 winapp CLI 提供了革命性的简化方案:

winapp create-debug-identity

 

此命令会为你的 EXE 注入临时身份,使你在开发阶段就能调用受保护的 API,而无需修改代码或重新编译。

 

[dlgcy] 之前执行程序路径设置错误:

getImage-5

 

需要修改配置文件:

getImage-6

 

再次执行,错误如下:

Failed to add package identity: Failed to register sparse package: PowerShell command failed with exit code 1

getImage-7

 

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] 依旧出错(看上去是版本号错误?):

getImage-8

 

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

getImage-9

 

生成了 .msix 文件:

getImage-10

 

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

getImage-11

 

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

getImage-12

getImage-13

 

需要输入密码(password):

getImage-14

 

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

getImage-15

getImage-16

getImage-17

 

不过导入这个证书后,msix 打开还是之前的错误。

原来是选择证书存储那一步需要 将所有的证书都放入 受信任的根证书颁发机构 中:

getImage-18

getImage-19

 

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

getImage-20

 

安装中:

getImage-21

 

安装完成(但有报错):

getImage-22

 

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

getImage-23

 

因为打包时的命令中已经指定了路径:

winapp pack .\bin\Debug\net8.0-windows\ --manifest .\appxmanifest.xml --cert .\devcert.pfx

 

所以清单文件中不需要再指定路径(这样的话,之前 winapp create-debug-identity 命令可能需要指定路径参数):

getImage-24

 

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

getImage-25

 

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

getImage-26

 

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

getImage-27

 

第三阶段:提交应用到微软商店

打包完成后,你需要通过微软的合作伙伴中心将应用提交到商店。

https://partner.microsoft.com/zh-cn/dashboard/apps-and-games/overview 

 

1、注册开发者账户

在提交之前,你需要在合作伙伴中心注册一个开发者账户。账户分为个人(免费)和公司(约 99 美元一次性注册费)两种类型,根据你的身份进行选择。

 

2、创建并完成应用提交

保留应用名称:首先,在合作伙伴中心为你的应用保留一个唯一的名称,最长可保留 3 个月。

getImage-28

 

getImage-29

 

开始提交:保留名称后,创建新的应用提交草稿。你需要逐步完成多个选项卡的信息填写:

  1. 定价和可用性:设置应用价格、销售市场以及是否提供免费试用。
  2. 属性:定义应用类别、子类别和系统要求。
  3. 年龄分级:完成问卷以获取年龄分级。
  4. 程序包这是关键步骤。上传你使用 winapp CLI 生成的 .msix.msixbundle 文件。
  5. Microsoft Store 一览:提供应用描述、屏幕截图、图标等,这些将显示在商店的产品详情页。
  6. 提交选项:可选的认证说明和发布计划。

getImage-30

 

上传之前生成的 msix 文件:

getImage-31

 

有点小错误需要修改:

getImage-32

 

修改后重新打包:

getImage-33

 

再次上传还是有错误:

getImage-34

 

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

getImage-35

 

再次打包:

getImage-36

 

再次上传,只剩下一个错误了:

声明的包依赖项不可用: Microsoft.WindowsAppRuntime.1.8,Neutral,Universal

getImage-37

 

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

getImage-38

 

给清单文件中的 Identity 项添加 ProcessorArchitecture="x64"

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

getImage-39

 

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

getImage-40

 

再改一下清单文件,加入中文语言;然后程序使用 Release 编译和打包(大小减小很多):

winapp pack .\bin\Release\net8.0-windows\ --manifest .\appxmanifest.xml --cert .\devcert.pfx

getImage-41

 

删除之前的包,上传新包:

getImage-42

 

3、通过认证并发布

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

getImage-43

getImage-44

 

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

getImage-45

 

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

getImage-46

 

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

getImage-47

 

生成式 AI 声明按照要求勾选即可,至于磁贴图片,好像需要在项目中修改:

https://learn.microsoft.com/en-us/windows/uwp/app-resources/images-tailored-for-scale-theme-contrast 

 

也就是清单文件里指定的这些图片,还是默认图片,所以没通过认证:

getImage-48

 

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

getImage-49

 

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

getImage-50

 

最后再重新上传、提交认证。

不过网页上的 Store 一览 中也能上传磁贴图标(优先级更高),后面如果还有问题就从这里上传吧:

getImage-51

 

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

a1a2d2709f3f316afc3656cfddc97842

 

现在就有相关链接了:

 

也可以在微软应用商店(Microsoft Store)中搜索应用名称(MultiAIBrowser、多重 AI 浏览器)进行安装使用了:

getImage-53

getImage-54

getImage-55

 

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

getImage-56

 

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

getImage-57

 

最后,欢迎大家来使用这个新上架的 多重 AI 浏览器(MultiAIBrowser)

 

总结

使用 winapp CLI 打包和发布 WPF 应用到微软商店,是一条从开发、调试到分发的现代化路径。它通过命令行工具简化了 MSIX 打包的复杂性,并与官方的商店发布流程无缝衔接。务必注意证书签名和项目配置等关键细节,以确保流程顺利进行。

getImage-58

 

原创文章,转载请注明: 转载自 独立观察员(dlgcy.com)

本文链接地址: [使用 winapp CLI 打包 WPF 项目并发布到微软商店](https://dlgcy.com/use-winapp-cli-package-wpf-app-and-publish-to-microsoft-store/)

关注微信公众号 独立观察员博客(DLGCY_BLOG) 第一时间获取最新文章

%title插图%num

发表评论