微软在 2026-01-22 官宣了一个新的开发工具, WinApp ,并 Github 上开源 。刚出厂的第一个周末,就有朋友来问我,这是不是微软新出的 AI 工具,和 Copilot 有什么区别?还见过外网有网友调侃,说还以为是 WinAMP 回来了,掏出珍藏的 mp3 才发现自己弄了个乌龙。这个固然是玩笑话,不过 WinAPP 定位确实不那么好描述。
WinApp 提供了什么功能
如果用一句话来定位,WinApp 是一个打包工具。它负责将一个软件项目的可执行文件打包成 MSIX 包,用于在微软应用商店发布。它支持打包的 app 可以是 C++,C#,Electron,Flutter 或者 Rust。WinApp 的核心功能是:创建 Manifest,管理发布软件需要的证书和签名,以及打包操作。
对于 C#,Rust,Flutter 这样已经有成熟包管理方案的开发环境,WinApp 的主要任务是负责和已有的包管理工具协同;只有 C++ 比较特殊:WinApp 的官方文档假设 C++ 开发者使用 CMake,但不假设开发者使用任何配套的包管理工具。相应地,winapp 为 C++ 特别提供了一些子命令,比如 winapp restore,开发者可以在 winapp.yaml 里定义需要的开发包,包括第一方的 Windows SDK,也可以是第三方的函数库比如 raylib;winapp 会从 nuget.org 下载。
Winapp 还有一些方便的小功能。 winapp tool 子命令可以直接调用 Microsoft.Windows.BuildTools 中的编译辅助工具,比如 winapp tool midl,等价于调用 midl.exe。除此之外,Winapp 会自动为每一个项目新建一个 .winapp 子目录,用于 C++ 开发 Windows app 的常用头文件和引用库拷贝到当前项目,简单的 Windows app 项目所需的几乎所有依赖,都可以保存在自己的项目开发目录下,对开发者相当友好。
怎么使用 Winapp 开发应用
我自己写了一个简单的教程项目。这个项目顶层是一个简单的命令行程序,同时包含了一个 component/calculator 子项目,用于创建一个计算加法的 WinRT组件。整个项目用 winapp管理依赖关系,CMake 管理项目,Visual Studio 2022 提供编译工具。这个例子也不仅仅是 winapp 的展示,它也展示了怎么通过 Cmake 来编译 WinRT 组件,并集成到可执行程序当中。目前它暂时支持 side-by-side 装载方式,之后我再尝试着增加其他的方式。
https:// github.com/fuzhouch/win app-cpp-tutorial/ Winapp 对 Windows 程序员们来说意味着什么
对我来说,Winapp 带给我最大的体验就是:它确实能让我完全不使用 Visual Studio 开发 C++ 的 Windows app 项目。 Visual Studio 在开发阶段也许很好用,但对持续集成却算不上友好,主要原因两个:一个是命令行工具分散在各个包里;另一个是 sln 和 vcxproj 两个项目管理格式资料奇缺,常用操作分散在官网文档的各个角落,Visual Studio 的界面可以说是唯一还算方便的工具,将大部分操作放进了界面,但仍然不少漏网之鱼,比如如何这篇文档:教程序员 每次编译WinRT组件时都生成 Nuget 包 。
这种工作方式对 AI 时代的开发工作流并不友好,特别是当许多程序员开始使用 Claude Code,Gemini CLI 和 Copilot CLI 这样强调程序员尽量只接触 prompt 时,这种大量操作集中在 Visual Studio 界面的做法很难和 CLI 工具配合。虽然 Visual Studio 本身和 Github Copilot 紧密集成,但即使抛开程序员的开发习惯不谈,这条技术路线也无法解决问题:过去十年里越来越多的程序员开始使用 Rust,Flutter,Electron 作为主力技术栈,而 Visual Studio 对他们并没有提供多少支持。
我在 Windows 上主要还是依赖 C++。虽然理论上 Visual Studio 对 C++ 的开发支持仍然领先,但它对 CMake 的支持却比不上 msbuild:它缺少一些标准编译方式的官方支持,比如如何下载 Nuget 包,或者编译、打包和部署 WinRT 组件,这是 Windows app 的基础架构之一,但 CMake 就只能靠手写,网上的资料也是根据开发者们自己的经验,混杂了 CMake 的一些早已过时的预设命令,实际的做法五花八门,而且不保证能工作。
Winapp 没有解决上述的所有麻烦,但第一版至少有了一个相对清晰的基础:C++ 常用的编译工具有集成,包管理通过 yaml 文件有了部分的预设。最后的证书管理、打包 app,也集成进了 winapp 的子命令中。最重要的是,这些都不再需要从 Visual Studio 的界面操作,至少我的例子项目是全程在 Zed 编辑器里通过 Gemini 和 Github Copilot 完成开发、调试、打包的过程。编码阶段完全没有启动过 Visual Studio,仅仅在最终调试一个 CMake 生成的 vcxproj 项目时产生了错误,而用 Visual Studio 验证。
结语
根据我和 Winapp 开发组的沟通,目前 winapp 的功能还没那么完善。不过现在这个程度已经足够让我把自己的一些测试和原型项目用 winapp 管理起来了。我也找了 winapp 开发组提了一些反馈,主要是针对依赖管理和 CMake 集成的操作,项目组负责人 Alex 反应挺快,拉了一位 PM 来和我对接。最后这个工具能发展成什么样,我还是挺期待的。
热门跟贴