框架选项概述
本文包含开始为 Windows 生成应用所需的信息。
Windows 提供了各种用于生成应用的语言、框架和工具,包括 WinUI、React Native for Desktop、WPF、C++、C#、.NET 和各种跨平台框架。 本文中介绍的信息可帮助你确定哪种选项最适合你。
WinUI
建议使用 WinUI 和Windows 应用 SDK 来创建外观出色的应用,并利用最新的 Windows 版本。 如果你是 Windows 开发的新手,或者刚开始开发新的 Windows 应用,WinUI 将为你提供创建出色的 Windows 11 应用所需的资源。
WinUI 是基于 XAML 标记的用户界面层,包含用于生成 Windows 应用的新式控件和样式。 作为 Windows 应用 SDK 的原生 UI 层,体现了 Fluent Design,为每个 Windows 应用提供客户期望的流畅感觉。
注意
Windows 应用 SDK 是一组新的开发人员组件和工具,它们代表着 Windows 应用开发平台的最新发展。 Windows 应用 SDK 提供一组统一的 API 和工具,可供 Windows 11(向下到 Windows 10 版本 1809)上的桌面应用以一致的方式使用。
虽然 WinUI 是原生 UI 层,但可以将 Windows 应用 SDK与 WPF、WinForms 或 Win32 应用配合使用。 如果你以前已经为 Windows 开发了应用,但想要在现有应用中开始使用 Windows 应用 SDK,请参阅特定于框架的指南。
React Native for Desktop
React Native 是一个开发平台,可用于构建跨平台应用。 React Native for Desktop 包含 React Native for Windows 和 macOS,为 Windows SDK 提供 React Native 支持。 React Native for Desktop 允许你使用 JavaScript 为 Windows 10 和 Windows 11 支持的所有设备生成本机 Windows 应用。 这包括电脑、平板电脑、二合一设备、Xbox、混合现实设备等。
使用 React Native for Desktop,可以在 JavaScript 或 TypeScript 中编写大部分或全部应用代码,框架生成本机 UWP XAML 应用程序。 如果你的应用需要调用平台 API,通常可以通过众多社区模块中的某个来实现此目的,或者,如果尚不存在这样一个模块,也可以轻松编写一个本机模块来公开它。
下面是选择 React Native for Desktop 的一些原因:
- 需要尽可能地跨平台共享代码,或具有要与之共享代码的 Web 属性。
- 通过快速刷新提升了开发人员工作效率和优化了内部循环。
- 应用的基础特性(性能、可访问性、国际化)与本机 UWP 应用一样好。
- 你有 JavaScript 或 TypeScript 的相关经验并偏好使用其中之一
- 希望在 npmjs.com 上利用仅限 JavaScript 的库,同时也会使用许多本机库。
- 你的应用将使用本机控件、可视化外观、动画效果和多种颜色,看上去就像是集成到 Windows 中使用的设计语言中一样。 此外,React Native for Desktop 应用不必在可以调用的 API 集上泄露,因为框架允许你调用平台 API,以及编写自己的视图管理器和本机模块。
- 社区发展势头强劲,并已形成许多社区模块。
有关 React Native for Desktop 的详细信息,请参阅以下链接:
- GitHub 上的 React Native for Windows 存储库
- GitHub 上的 React Native for macOS 存储库
- API 参考
- React Native for Desktop 资源
WPF
WPF 是一个完善的框架,适用于有权访问 .NET 或 .NET Framework 的 Windows 桌面应用程序。 与 WinUI 一样,它也使用 XAML 标记将 UI 与代码分离。 WPF 提供一套完善的应用程序开发功能,这些功能包括控件、数据绑定、布局、二维和三维图形、动画、样式、模板、文档、媒体、文本和版式。 WPF 属于 .NET,因此可以生成整合 .NET API 其他元素的应用程序。
此外,现在可以将沙盒环境集成到打包的 WPF 应用程序中,从而提供额外的安全层。 由于新的 Win32 应用隔离安全功能,此增强几乎不需要对代码进行任何更改。
提示
如果你已经投资了 WPF,则可以继续使用它,并利用 .NET 9 中的现代化选项。 你可以生成知道Microsoft继续投资 WPF 的应用。 有关详细信息, 请参阅客户端应用开发框架常见问题解答 。
如果有 WPF .NET 应用,还可以访问 Windows 应用 SDK 提供的新式 Windows 平台功能和 API。 有关详细信息,请参阅在 WPF 应用中使用 Windows App SDK 和实现桌面应用的现代化。
提示
如果需要更多帮助来决定哪个框架是应用的最佳选择,请参阅 为 Windows 开发项目选择最佳应用程序框架培训模块。
其他本机平台选项
许多适用于 Windows 的应用都是使用 Win32、Windows 窗体 或 UWP 编写的。 这些框架中的每一个都得到了支持,并将继续接受错误、可靠性和安全性修补程序,但对新功能和样式的投资程度各不相同。 有关这些应用类型的详细信息,请参阅以下选项卡。
Win32 桌面应用(有时也称为经典桌面应用)是本机 Windows 应用程序的原始应用类型,需要具备对 Windows 和硬件的直接访问权限。 这使得 Win32 应用类型成为需要最高级别性能和直接访问系统硬件的应用程序的理想选择。
与在托管运行时环境上(如 WinRT 和 .NET)相比,将 Win32 API 与 C++ 结合使用可以实现最高级别的性能和效率,方法是通过使用非托管代码对目标平台进行更多控制。 但是,对应用程序的执行进行这种级别的控制需要更加谨慎和更集中的注意力才能正确执行,同时,需牺牲开发效率以提高运行时性能。
以下是 Win32 API 和 C++ 提供的一些主要功能,使你能够生成高性能应用程序。
- 硬件级优化,包括对资源分配、对象生存期、数据布局、对齐、字节封装等的严格控制。
- 通过内部函数访问面向性能的指令集,如 SSE 和 AVX。
- 使用模板进行高效且类型安全的泛型编程。
- 高效且安全的容器和算法。
- DirectX,特别是 Direct3D 和 DirectCompute。
- 使用 C++/WinRT 创建新式桌面 Win32 应用,这些应用具有对 Windows 运行时 (WinRT) API 的一级访问权限。
此外,现在可以将沙盒环境集成到 Win32 应用程序中,从而提供额外的安全层。 由于新的 Win32 应用隔离安全功能,此增强几乎不需要对代码进行任何更改。
还可以访问 Windows App SDK 提供的新式 Windows平台功能和 API。 有关详细信息,请参阅在现有项目中使用 Windows 应用 SDK和实现桌面应用的现代化。
其他跨平台选项
如果需要应用是跨平台的,除了 React Native for Desktop,还应考虑 .NET MAUI 或渐进式 Web 应用(PWA)。 还有许多其他选择(此处为常用选项的列表),但这些都是一些不错的起点。
.NET MAUI 利用 Windows 上 WinUI 的强大功能,同时在其他操作系统上启用执行。 另一个跨平台选项是渐进式 Web 应用 (PWA) 网站,功能类似于在 Windows 和其他受支持平台上运行的已安装的本机应用,而在浏览器类似于常规网站。
有关详细信息,请参阅以下选项卡。
.NET 多平台应用 UI (MAUI) 是一个开源的跨平台框架,用于构建 Android、iOS、macOS 和 Windows 应用程序,这些应用程序能够集中从一个 .NET 代码库中利用各平台的本机 UI 和服务。 由于 .NET MAUI 偏好平台本机体验,因此它使用 WinUI 和 Windows 应用 SDK,以便应用能够在 Windows 上获取最新的用户体验。 这使你的应用能够访问通过 WinUI 提供的所有内容,还能够访问其他平台。
如果存在以下情况,则很适合选择 .NET MAUI for Windows:
- 你希望尽可能多地在移动和桌面应用程序之间共享 .NET 代码。
- 你希望将应用程序传送到提供本机平台体验的其他桌面和移动目标,而不只是 Windows。
- 你希望使用 C# 和/或 XAML 来生成跨平台应用。
- 你正在使用 Blazor 进行 Web 开发,并想要在移动或桌面应用程序中包含其中的所有或部分内容。
有关 .NET MAUI 的详细信息,请访问以下链接:
应用开发框架功能比较
有多种选项可用于开发适用于 Windows 的应用程序。 最适合的选择取决于您的应用程序要求、现有代码以及您对技术的熟悉程度。 下表列出了 Windows 上最常用的应用开发框架以及每个框架支持的功能。
功能 | .NET MAUI | Blazor 混合 | React Native for Desktop | UWP XAML (Windows.UI.Xaml) | Win32(MFC 或 ATL) | Windows 窗体 | WinUI 3 | WPF |
---|---|---|---|---|---|---|---|---|
语言 | C# | C# | JavaScript、TypeScript | C#、C++、Visual Basic | C++、Rust | C#, Visual Basic | C#、C++ | C#, Visual Basic |
UI 语言 | XAML/代码 | Razor | JSX | XAML | 代码 | 代码 | XAML | XAML |
UI 设计器 (拖放) |
❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ |
UI 调试 | 热重载 | 热重载 | 快速刷新 | 热重载 | - | 热重载 | 热重载 | 热重载 |
流畅设计 | ✅ | ✅ | ✅ | ✅(通过 WinUI 2) | ❌ | ❌ | ✅ | ❌ |
.NET | .NET | .NET | 空值 | .NET Core 和 .NET Native | 空值 | .NET 和 .NET Framework | .NET | .NET 和 .NET Framework |
Windows 应用 SDK | ✅(详细信息) | ✅通过 MAUI | ✅(详细信息) | ❌ | ✅ | ✅(详细信息) | ✅ | ✅(详细信息) |
适合触控 | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ |
跨平台 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Xbox/HoloLens 应用 | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
沙盒 (AppContainer) | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
当前支持 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
接收更新 | ✅ | ✅ | ✅ | ✅(安全性和 bug 修复) | ✅ | ✅ | ✅ | ✅ |
路线图 | GitHub | GitHub | GitHub | 不适用 | 不适用 | GitHub | GitHub | GitHub |
有关这些选项的详细信息,请参阅:
- 客户端应用开发框架常见问题解答
- .NET 多平台应用 UI (MAUI)
- ASP.NET Core Blazor Hybrid
- React Native for Desktop
- 通用 Windows 平台 (UWP)
- 关于选择 ATL 和 MFC 的建议
- Windows 窗体
- Windows Presentation Foundation (WPF)
- Windows 应用 SDK (WinUI 3) 中的 WinUI
后续步骤
- 使用 WinUI 开始开发适用于 Windows 的应用
WinUI 是适用于 Windows 应用的建议平台,这些步骤将快速帮助你入门。
- 在 Windows 上设置开发环境
Windows 不仅非常适合开发在 Windows 上运行的应用,它也是一个为任何平台开发应用的强大环境。 详细了解可用于最大限度地开发的工具和选项。