Windows 应用开发 CLI(winapp CLI)

重要

Windows 应用开发 CLI 目前为公开预览。 在最终发布之前,功能和命令可能会更改。 通过创建问题来共享反馈。

Windows 应用开发 CLI(winapp CLI)是一种命令行工具,用于使用所选框架生成Windows应用。 它适用于终端、你喜欢的编辑器或 AI 编码代理。

  • WinUI 应用:创建、运行、调试、测试和打包 WinUI 应用,而无需打开Visual Studio。
  • 跨平台和其他框架:在不更改框架的情况下,为现有的 Electron、Flutter、Tauri、Rust、.NET 或 C++ 应用带来Windows功能。 winapp CLI 设置Windows 应用 SDK和 Windows SDK,提供应用包标识,以便可以调用通知和设备上的 AI 等 API,并将其打包为 MSIX,用于在 Microsoft Store 或你自己的分发渠道中分发。

winapp CLI 的主要优势

蓝色像素波上方一个凸起磁贴上的命令提示符图标

从终端创建和运行 WinUI 应用
winapp new 从官方模板创建 WinUI 应用,包括空白、NavigationView、TabView 和 MVVM 入门模板。 winapp run 会生成项目,安装匹配的 Windows 应用 运行时,并启动应用,而无论其已打包还是未打包。
构建第一个 WinUI 应用

一个位于凸起磁贴上的 bug 图标,覆盖在一条蓝色像素对角带之上

使用包标识和故障诊断进行调试
使用包标识运行应用,以便测试通知、设备端 AI 和其他需要标识的 API。 添加 --debug-output 以捕获调试消息和故障转储。 对于 WinUI 崩溃,winapp 会解码封存异常,帮助你定位到失败的 XAML 事件处理程序。
使用包标识进行调试

在蓝色像素波上凸起的磁贴上带有火花图标的聊天气泡

让 AI 编码代理基于真实的 WinUI 代码
winapp find-ui从 WinUI 3 库和 Windows Community Toolkit 返回可用的 XAML 和 C# 代码。 winapp find-api检查项目引用Windows 运行时 API。 代理使用它们从实际示例和元数据生成代码,而不是猜测。
将 winapp CLI 与 AI 代理配合使用

一个指针和触摸图标,位于蓝色像素的对角带上的凸起图块上

自动化并测试应用的 UI
winapp ui通过UI 自动化检查和与正在运行的应用交互,并捕获屏幕截图和录制。 在Windows沙盒中运行应用,以在干净的环境中对其进行测试。
UI 自动化

包图标位于凸起磁贴上,覆盖在蓝色像素波浪之上

打包、签名并发布
winapp pack 生成项目,将其打包为 MSIX,并在一个步骤中对其进行签名。 在本地生成开发证书、使用 Azure 受信任签名 签署发布版本,并在 GitHub Actions 或 Azure DevOps 运行器上安装 winapp CLI。
打包应用

蓝色像素对角带上一个凸起图块上的谜题图标

将Windows功能引入任何框架
将Windows SDK 和Windows 应用 SDK、包标识和 MSIX 打包添加到使用 .NET、C++、Electron、Flutter、Rust 或 Tauri 构建的应用,而无需更改生成系统。
请参阅支持的框架

WinUI 入门

安装 winapp CLI 和 .NET SDK 后,创建并运行 WinUI 应用:

winapp new --name MyWinUIApp --template winui-navview --use-defaults
cd MyWinUIApp
winapp run

准备好在本地测试包时,请生成开发证书并创建签名的 MSIX 包:

winapp cert generate --manifest ./Package.appxmanifest
winapp pack ./MyWinUIApp.csproj -c Release --cert ./devcert.pfx

开发证书使用默认密码,仅用于本地测试。 在分发应用之前,请使用受信任的证书对其进行签名,例如使用 winapp az-sign。 有关详细信息,请参阅安全性。

有关包括设置和第一个 UI 更改的分步演练,请参阅 构建你的第一个 WinUI 应用。 若要查看所有可用的模板,请运行 winapp new --list。 有关完整的工作流,包括调试、UI 自动化和打包,请参阅 将 winapp CLI 与 WinUI 配合使用。

安装

WinGet

安装 CLI 的最简单方法是通过 WinGet (Windows 程序包管理器):

winget install Microsoft.winappcli --source winget

如果使用 WinGet PowerShell 模块,请改为运行 Install-WinGetPackage Microsoft.winappcli 。

NPM

对于 Electron 项目,请通过 npm 进行安装:

npm install @microsoft/winappcli --save-dev

GitHub Actions/Azure DevOps

对于 CI/CD 流水线,请使用 setup-WinAppCli操作在运行器/代理上自动安装 CLI。

手动下载

从 GitHub 版本下载最新版本。

验证安装

安装后,通过调用 CLI 验证安装:

winapp --help

或者,如果使用 Electron/Node.js:

npx winapp --help

将 winapp CLI 与 AI 代理配合使用

winapp CLI 旨在与 AI 编码代理很好地配合工作。 命令(例如 find-ui 和 find-api)会返回带有 --json 的机器可读输出,因此代理可以在编写代码之前查找实际的 WinUI 示例和 Windows 运行时 API。

安装 winapp 插件,为你的代理添加适用于 winapp CLI 工作流的技能:

# GitHub Copilot CLI
copilot plugin install microsoft/WinAppCli

# Claude Code
claude plugin marketplace add microsoft/WinAppCli
claude plugin install winappcli@winappcli

如果在Visual Studio Code中工作,WinApp VS Code 扩展会从编辑器运行 winapp CLI 命令,并在按 F5 时使用包标识启动应用。 从Visual Studio Marketplace安装它。

支持的框架

winapp CLI 适用于 WinUI 和其他应用框架:

Framework 指南
WinUI WinUI 入门
.NET/ WPF / WinForms 开始使用 .NET
.NET MAUI .NET MAUI 入门
C++ (CMake) 开始使用 C++
电子 开始使用 Electron
Rust 开始学习 Rust
陶里 开始使用Tauri
Flutter 开始使用 Flutter

其他指南:

  • 打包 EXE/CLI:将现有 EXE/CLI 打包为 MSIX 的分步指南
  • 稀疏打包:使用仅含标识的(稀疏)MSIX 和外部内容为未打包的应用提供包标识
  • Shell 补全:在 PowerShell、bash、zsh 和 fish 中为命令、选项和值启用选项卡补全
  • 安全指南:计算机上的开发证书和开发人员模式发生哪些更改、如何处理 devcert.pfx以及如何登录生产

命令概述

类别 指令
创建和设置 new, init, restore, update
运行和调试 run, create-debug-identity, embed-identity, unregister
包装 打包
清单 清单生成, 清单更新资产, 清单添加别名
证书和签名 cert generate, cert install, sign, az-sign, create-external-catalog
面向代理的代码搜索 find-ui, find-api
UI 自动化和沙盒 ui, target
Utilities 工具, 存储, 获取-winapp-路径, 完成
Node.js/Electron node create-addon, node generate-bindings, node add-electron-debug-identity, node clear-electron-debug-identity

有关完整的 CLI 参考,请参阅 CLI 参考。

示例

GitHub上的示例文件夹为每个受支持的框架都有一个可运行的项目:

Sample Description
WinUI 应用 已使用 winapp run 注册并启动打包的 WinUI 应用
WinUI 未打包的应用 使用 winapp run 启动的未打包 WinUI 应用
WinUI 解决方案 多项目解决方案(应用和测试项目),显示 winapp run 如何选择应用项目
C++ WinUI 应用 使用 C++ 和 CMake 构建、不使用 XAML 或 MSBuild 的 WinUI 窗口
WPF应用 WPF 桌面应用
.NET MAUI应用 使用 winapp CLI 打包和签名.NET MAUI Windows项目
C++ 应用 使用 CMake 构建的本机 C++ Win32 应用
电子 带有清单、资产和本机 C++ 和 C# 加载项的 Electron Forge 应用
Rust 应用 调用 Windows API 的 Rust 应用
Tauri 应用 具有 Rust 后端的 Tauri 应用
Flutter 应用 具有程序包标识和Windows 应用 SDK的 Flutter 桌面应用
精简应用 带有稀疏打包(仅标识 MSIX)和安装程序的 WPF 应用

为什么包标识重要?

许多Windows API 要求应用具有包标识。 通过身份识别,您的应用可以访问通知、操作系统集成以及设备上的人工智能等功能。 WinUI 应用模板包括包清单,因此 winapp run 默认为它们提供标识。 有关包标识解锁功能的完整列表以及帮助选择合适打包模型的信息,请参阅 打包概述。

开源

winapp CLI 开放源代码。 可以在 GitHub 中找到源代码、文件问题和贡献内容。 如需帮助,请参阅 支持。