本文旨在促进对 Windows 开发体验和产品方向的普遍了解。
入门
我应该使用什么来构建 Windows 应用?
对于 Windows 桌面应用程序开发,建议使用 WinUI 3 和 Windows 应用 SDK。 WinUI 包含用于生成 Windows 应用的新式控件和样式,这些应用利用最新的 Windows 11 功能,向下可用于 Windows 10 版本 1809。
根据你的构建内容和构建方式,其他选项可能更适合:
- 如果 Windows 应用 SDK/WinUI 3 不能满足你的需求,WPF 可能会满足你的需求。
- 如果你的目标是跨平台应用:React Native 和 .NET MAUI 可供你用于生成跨平台应用。 对于 C# 开发人员,.NET MAUI 是一个不错的选择。 JavaScript/TypeScript 开发人员更熟悉 React Native。
- 如果你是一名 Web 开发人员:可以使用 WebView2 作为应用程序主机。 这样,你便可以使用 Web 技术来构建可访问 Windows SDK 和 Windows 应用 SDK API 的桌面应用。 还可以使用 React Native for Desktop。
- 如果你是一名 C++ 开发人员:对于桌面应用,Windows 应用 SDK/WinUI 3 是一个不错的选择。 如果要构建游戏,请考虑使用 DirectX。
- 如果你是一名 Rust 开发人员:请查看适用于 Windows 的 Rust。
存在可能更合适的其他开发技术,具体取决于你的需求和技术偏好。 请参阅框架选项概述。
在哪里可以找到关于 Windows 开发技术的直观比较?
请参阅应用开发选项的概述。
Windows 应用 SDK/WinUI 3
什么是 Windows 应用 SDK
Windows 应用 SDK 是一个 Windows 应用程序开发平台,可用于创建美观、现代、向后兼容的(低至 Windows 10 1809)桌面应用。 WinUI 3 是附带 Windows 应用 SDK 的 UI 框架。
Windows 应用 SDK 与 Windows SDK 之间的区别是什么?
两者都是软件开发工具包 (SDK),可用于构建 Windows 应用。
Windows 应用 SDK 是一个全新开发平台,可用于构建可跨 Windows 版本(低至 Windows 10 1809)安装的新式桌面应用。 使用 Windows 应用 SDK 构建应用时,可以访问最新的 Windows 开发平台功能。 Windows 应用 SDK 包含 WinUI 3。
Windows SDK 是一个开发平台,可用于构建 UWP 应用和 Win32/桌面应用。 它是围绕与特定版本的 OS 耦合的 Windows API 设计的。
Windows 应用 SDK 不会取代 Windows SDK。 Windows 应用 SDK 是对 Windows SDK 的补充。 它围绕一系列丰富的 Windows OS API(你可以使用 Windows SDK 访问)提供方便的、与 OS 分离的抽象。 当你使用 Windows 应用 SDK 构建应用时,可能最终会使用一些 Windows SDK API,具体取决于所需的功能。 随着时间的推移,更多的 Windows SDK 功能将被提升到 Windows 应用 SDK 中。
是否可以在现有的 Windows 应用中使用 Windows 应用 SDK/WinUI 3?
请注意,WinUI 3(UI 框架)附带 Windows 应用 SDK(Windows 平台开发框架)。
一般来说,除非你已准备好完全迁移 UI 框架,否则不能使用 WinUI 3。 我们正在开发一项名为 XAML 岛的功能,该功能使你能够在其他 UI 框架(WPF、Win32)中托管 WinUI 3 内容。
你应该能够在任何 Win32/桌面应用中使用 Windows 应用 SDK 的元素,具体取决于现有应用的构建方式。 Windows 应用 SDK/WinUI 3 不支持 UWP 应用。
这意味着 WPF/MFC/WinForms 应用可以使用与 WinUI 3 不相关的 Windows 应用 SDK API。 此类 API 示例包括应用生命周期、窗口化和 Toast 通知。
是否需要使用 Visual Studio 来构建 WinUI 3 应用?
强烈建议使用 Visual Studio 2022 版本 17.1 及更高版本开发 Windows 应用 SDK/WinUI 3 应用。 使用最新版本的 Visual Studio 使你能够访问丰富的开发功能(例如热重载)。
你也许能够使用其他 IDE 和开发工作流,但 Visual Studio 目前是唯一正式受支持的用于 Windows 应用 SDK/WinUI 3 的 IDE。 请注意,编译使用 XAML 或 Windows 应用 SDK/WinUI 3 的项目需要 MSBuild。
当我使用 Windows 应用 SDK/WinUI 3 构建应用时,构建的应用是否为“WinUI 3 应用”?
是 - 建议使用“WinUI 3 应用”这一描述。
能否通过逐步将 WinUI 2 组件替换为 WinUI 3 组件来逐步将 WinUI 2 应用更新到 WinUI 3?
否。 Windows 应用 SDK 无法在 UWP 应用中使用,并且 WinUI 2 不能与 WinUI 3 混合使用。 请参阅从 UWP 迁移到 Windows 应用 SDK。
将 UWP 应用迁移到 Windows 应用 SDK/WinUI 3 的难度有多大?
迁移 UI 组件通常很简单(对于 C# 和 C++/WinRT)。 在不同情况下,从 UWP 迁移到 Windows 应用 SDK/WinUI 3 的工作量主要取决于以下三个因素:
- 项目文件和 MSBuild 自定义:迁移项目可能需要完成大量工作,具体取决于是否使用了高级 MSBuild 功能。
- .NET API 迁移:如果 UWP 应用依赖于 .NET,则需要升级到 .NET 6 及更高版本。 在大多数情况下,采用 .NET 6 很简单。
- UI 组件库:如果使用 UI 组件库,则需要面向 WinUI 3 的新版本库。
- 如果 UWP 源代码是在已取代的 C ++/CX 中编写的,则将涉及一些源代码移植。 请参阅从 C++/CX 移动到 C++/WinRT。
有关 UWP 迁移的详细信息,请参阅从 UWP 迁移到 Windows 应用 SDK。
如果 Store 中有一个现成的 UWP 应用,是否可以使用相同的标识符发布新的打包 WinUI 3 应用?
是,无需更新应用程序的标识即可发布升级的应用。 用户具有的旧版本将更新为新版本。 本指南仅适用于桌面应用。 Xbox、HoloLens 和 Surface Hub 应用无法迁移到 WinUI 3。
如何打包/分发 WinUI 3 应用?
请参阅部署概述。
在哪里可以找到 Windows 应用 SDK 迁移指南?
如果我想要使用 WinUI 3,是否需要使用 XAML 标记?
否。 可以在代码中创建 UI 控件。 但是,以声明性 XAML 标记的形式表示 WinUI 3 UI 有很多益处,例如可以改进开发人员体验。
如果要从 UWP 迁移到 WinUI 3,你或许能够重用许多 XAML 标记和与 UI 相关的代码(但必须更新某些语法)。 如果要从 WPF 迁移到 WinUI 3,你可以重用许多概念,但控件集和 API 将有所不同。
Visual Studio 是否具有针对 WinUI 3 的设计图面/GUI 设计器?
否。 我们认为这是 WinUI 3 开发人员体验中的一个缺口。 XAML 热重载等工具可在许多情况下提供帮助。
Windows 应用 SDK 是否包含 WinUI 3?
是的。 WinUI 3 作为 Windows 应用 SDK 的一部分提供。
Windows 应用 SDK 是否包含 WinUI 2?
否。 WinUI 2 是 UWP 平台的一部分。
WinUI 2 和 WinUI 3 是否基于相同技术构建?
并不全面。 虽然 WinUI 3 始于 WinUI 2 代码库,但它们是截然不同的技术。 WinUI 2 和 WinUI 3 都是跨 .NET 和 C++ 运作的基于 XAML 的 UI 框架。 请注意,WinUI 2 和 WinUI 3 互不兼容。
是否可以在不使用 Windows 应用 SDK 的情况下使用 WinUI 3?
否。 WinUI 3 作为 Windows 应用 SDK 的一部分提供。
是否可以在未打包的应用中使用 WinUI 3?
是的。 Windows 应用 SDK 中的所有技术都可在未打包的应用中使用,包括 WinUI 3。
XAML 岛和 WinUI 3 之间的区别是什么?
通过 XAML 岛,你可以将新式 WinUI 控件与其他框架(WinForms 和 WPF)中的现有 Win32 UI 一起托管。 如今,大多数系统 XAML 和 WinUI 2 控件都支持 XAML 岛。 有关详细信息,请参阅在桌面应用中托管 WinRT XAML 控件(XAML 岛)。 XAML 岛对 WinUI 3 控件的支持从 Windows 应用 SDK 1.4 开始提供。
如果我使用 WinUI 3,我的应用在 Windows 11 和 Windows 10 上看起来是否具有现代感?
是的,在打包和未打包方案中,应用的 UI 将在所有受支持版本的 Windows 11 和 Windows 10(低至版本 1809)继承最新的 Fluent UI 设计原则。
是否可以在使用 Windows 应用 SDK 构建的应用中使用云母或亚克力背景?
是的。 请参阅在适用于 Windows 11 的桌面应用中应用云母或亚克力材料。
在哪里可以找到 WinUI 3 示例?
请参阅示例和资源。 一些值得注意的存储库:
- WindowsAppSDK 示例:演示如何使用特定的 Windows 应用 SDK API 集。
- WinUI 3 演示:包含在 Microsoft WinUI 3 演示期间使用的演示。
- WinUI 库:展示 WinUI 3 和 Windows 应用 SDK。 还可以在 Microsoft Store 中获取 WinUI 库。
UWP 和 WinUI 2
是否可以在 Microsoft Store 外部分发 UWP 应用?
是的。 如果 MSIX 包已签名,则签名证书在目标设备上必须有效且可信。
是否可以将 UWP XAML UI 控件与 Win32、WPF 或 WinForms UI 控件混合使用?
是 - 通过 XAML 岛可执行此操作。 了解有关 XAML 岛的详细信息。
跨平台开发
如果我最终想要面向跨平台场景,是否可以在开始时使用 WinUI 3 和应用 SDK,之后再集成 .NET MAUI?
目前没有。 尽管 .NET MAUI 应用在 Windows 上运行时使用 Windows 应用 SDK/WinUI 3,但如果预计需要面向多个平台,我们建议从 .NET MAUI 或 React Native for Desktop 开始。
如果要构建可在 Windows 和 Xbox 上运行的应用,应该使用什么工具?
如果你的应用需要支持 Xbox、HoloLens 或 IoT,建议使用 UWP。 Windows 应用 SDK 不支持这些平台。 对于游戏开发,建议使用 Microsoft 游戏开发工具包。
如果要构建可在 Windows 和 Surface Hub 上运行的应用,应该使用什么工具?
如果同时面向 Windows 和 Surface Hub,建议使用 UWP。
如何在 Windows 上构建具有本机风格的渐进式 Web 应用 (PWA)?
打包、部署和更新
打包的应用、未打包的应用和使用外部位置打包的应用有何区别?
有关打包、解包的应用,以及使用外部位置打包的应用的定义,请参阅部署概述。 该主题还说明每个选项的优缺点。
我的 WinUI 3 应用是否会为最终用户自动更新?
可以通过 Store、.appinstaller 文件或在现有 MSI 或 setup.exe 包中交付 Windows 应用 SDK/WinUI 3 应用。 Store 和 AppInstaller 为已启用自动更新的最终用户提供自动更新支持,但 MSI/setup.exe 应用需要有自己的更新程序。
是否可以在不使用 MSBuild 的情况下使用 Windows 应用 SDK?
一般来说,不可以。 WinUI 3 和 Windows 应用 SDK 需要 MSBuild,这就是 Visual Studio 成为 Windows 应用 SDK/WinUI 3 应用程序开发的先决条件的原因。 虽然在技术层面,可以使用其他工具链生成不使用 WinUI 3 的 Windows 应用 SDK 应用,但这是不受支持的。
性能和优化
我可以执行什么操作来为最终用户提供很棒的 Windows 应用使用体验?
请参阅使应用适用于 Windows。
兼容性
用户是否必须更新 Windows 才能使用 Windows 应用 SDK/WinUI 3 应用?
拥有 Windows 10 版本 1809 及更高版本的用户无需更新其 OS 即可安装 WinUI 3/Windows 应用 SDK 应用。
是否可以使 WinUI 3 应用面向 Arm64?
是的。
弃用和迁移
是否弃用 UWP/WinUI 2?
否。 UWP 和 WinUI 2 仍受支持,并将收到 bug、可靠性和安全修复程序。 但是,大多数新特性和功能(包括对最新 .NET 运行时的支持)将仅添加到 Windows 应用 SDK/WinUI 3。
何时应将 UWP/WinUI 2 应用迁移到 WinUI 3?
如果 UWP 开发人员对 UWP 及其功能集感到满意,那么将应用迁移到 Windows 应用 SDK 应该感到毫无压力。 对于某些应用,最佳选择可能是永远不迁移。 对于希望从 Microsoft 的最新 Windows 平台和 .NET 投资中受益的应用,应考虑将这些应用迁移到 Windows 应用 SDK。 请参阅从 UWP 迁移到 Windows 应用 SDK。
何时不应将 UWP 和 WinUI 2 应用迁移到 WinUI 3?**
如果要构建适用于 Xbox、Surface Hub 或 HoloLens 的应用,建议继续使用 UWP。
是否弃用 WPF?
否。 WPF 仍受支持,并且还会收到一些功能更新。
是否弃用 WinForms?
否。 WinForms 仍受支持,并且还会收到一些功能更新。
是否弃用 Windows 运行时 (WinRT)?
否。 WinRT 是指一种应用程序二进制接口 (ABI),支持在多种语言之间进行互操作。 WinRT 是 COM 演进而来的。 Windows 应用 SDK 通过 WinRT API 提供其大部分功能。