本常见问题解答提供有关 Windows 应用程序开发的常见问题的解答,包括有关为项目选择合适的框架的指导。 涵盖的主题包括:
- 入门和 Windows 应用开发环境。
- 使用 WinUI、Windows Presentation Foundation(WPF)和 Windows 窗体(WinForms)进行本机仅限 Windows 的应用开发。
- Windows 软件开发工具包(SDK)和 Windows 应用 SDK。
- 将 Windows 作为跨平台开发策略的一部分。
- 使用 .NET MAUI、Blazor 和 ASP.NET Core 进行混合和 Web 应用开发。
- 如何选择一种方法,同时了解Microsoft的投资。
Windows 应用开发布局
在哪里可以找到 Windows 开发技术的简单概述?
若要大致了解当今 Windows 开发人员的选项,请观看最新的 Windows 开发聊天 集,选择理想的开发平台,其中讨论 WinUI、.NET MAUI、React Native、Blazor 和渐进式 Web 应用(PWA)。
还可以参考适用于 Windows 开发人员的应用开发选项
概述。
为什么客户端应用开发对于云服务时代的现代数字化转型仍然至关重要?
在云服务时代,客户端应用开发仍然是现代数字化转型的关键组成部分。 对于开发人员来说,构建客户端应用程序不仅对于访问至关重要,而且对于在用户设备上提供响应式有意义的交互至关重要。
下面是客户端应用很重要的原因:
- Device Reach: 全球有超过 15 亿个 Windows 设备和 50 多亿 Android 和 iOS 设备,客户端应用允许你直接将应用程序带到他们选择的设备上。
- 网关到智能服务: 客户端应用通常是用户与服务的第一次交互。 它们提供丰富的交互式界面,使你能够展示智能功能并将产品与其他产品区分开来。
- 云集成可伸缩性: 集成良好的客户端应用可以毫不费力地与后端云服务同步,从而在用户群增长时实现实时数据访问和无缝可伸缩性。
- 提高工作效率和用户忠诚: 经过深思熟虑的应用可以提高工作效率,并使用户随着时间的推移与产品或服务保持参与。
本机仅限 Windows 的应用开发
什么是 Windows 应用 SDK?
Windows 应用 SDK 是一个 Windows 应用程序开发平台,可用于创建美观、现代、向后兼容的(低至 Windows 10 1809)桌面应用。 WinUI 是 Windows 应用 SDK 附带的 UI 框架。
Windows 应用 SDK 和 Windows SDK 有何区别?
两者都是软件开发工具包 (SDK),可用于构建 Windows 应用。
Windows 应用 SDK 是一个全新开发平台,可用于构建可跨 Windows 版本(低至 Windows 10 1809)安装的新式桌面应用。 使用 Windows 应用 SDK 生成时,可以使用最新的 Windows 开发平台功能。 Windows 应用 SDK 包括 WinUI。
Windows SDK 是一个开发平台,可用于构建 UWP 应用和 Win32/桌面应用。 它是围绕与特定版本的 OS 耦合的 Windows API 设计的。
Windows 应用 SDK 不会取代 Windows SDK。 相反,Windows 应用 SDK 是对 Windows SDK 的补充。 它围绕已使用 Windows SDK 可访问的丰富 Windows OS API 目录提供了一个方便的、与 OS 分离的抽象。 使用 Windows 应用 SDK 构建的应用仍可能使用 Windows SDK API,具体取决于功能需求。 随着时间的推移,更多的 Windows SDK 功能将进入 Windows 应用 SDK。
我正在构建一个新团队来开发仅限 Windows 的应用。为何应选择使用本机 Windows 框架(如 WinUI、WPF 或 WinForms)进行开发?
下面是为仅限 Windows 的应用选择本机 Windows 框架的一些原因:
- 性能: 本机 Windows 框架经过优化,以利用新式 Windows 硬件,提供快速响应的用户体验。
- 集成: Windows 附带了各种 API,这些 API 仅支持在 Windows 上提供复杂的体验。 本机框架提供与这些功能和 API 的深度集成。
- 本机用户体验: 本机框架跨 Windows 设备提供一致的体验,确保你的应用在任何地方都能正常运行。
- 脱机支持: 本机框架支持脱机方案,即使没有 Internet 连接,应用也能正常运行。
- 货币: 本机框架受到Microsoft的积极维护和支持,确保访问最新的更新和功能。
我应该使用哪个框架来利用Microsoft对 Windows 应用开发的最新投资?
如果要构建一个新的仅限 Windows 的应用,我们建议使用 WinUI。 WinUI 是用于 Windows 应用开发的最新本机 UI 框架,旨在跨各种 Windows 设备工作。 它提供了一个现代灵活的 UI 框架,用于创建视觉吸引力和交互式 Windows 应用。 WinUI 是 Windows 应用 SDK 的一部分,最适合最新版本的 Windows。
是否可以在现有 Windows 应用中使用 Windows 应用 SDK/WinUI?
请注意, WinUI (UI 框架)附带了 Windows 应用 SDK (Windows 平台开发框架)。
通常,除非应用已准备好完全迁移其 UI 框架,否则无法使用 WinUI。 名为 XAML 岛屿 的功能正在开发中,以在其他 UI 框架(WPF、Win32)中托管 WinUI 内容。
Windows 应用 SDK 的元素通常可用于桌面应用中,具体取决于现有应用的生成方式。 Windows 应用 SDK 不支持 UWP 应用。
这意味着 WPF/MFC/WinForms 应用可以使用与 WinUI 无关的 Windows 应用 SDK API。 示例包括应用生命周期、窗口化和 Toast 通知。
有关详细信息 ,请参阅在现有项目中使用 Windows 应用 SDK 。
是否需要使用 Visual Studio 生成 WinUI 应用?
强烈建议使用 Visual Studio 2022 版本 17.10 或更高版本进行 WinUI 开发。 最新的 Visual Studio 版本提供丰富的开发功能(如热重载)并包括可简化设置的 WinUI 应用程序开发 工作负载。
其他 IDE 和工作流可能正常工作,但 Visual Studio 目前是唯一正式支持的 WinUI IDE。 请注意,编译 XAML 或 WinUI 项目需要 MSBuild 。
WinUI、WinUI 2 和 WinUI 3 之间的区别是什么?
WinUI 是用于 Windows 应用开发的最新本机 UI 框架。 它提供了一个现代灵活的 UI 框架,用于创建视觉吸引力和交互式 Windows 应用。 WinUI 是 Windows 应用 SDK 的一部分,最适合最新版本的 Windows。
WinUI 2 是基于 UWP 构建的一组 UI 控件和样式。 它为 UWP 应用提供新式外观,专为 Windows 10 设计。
WinUI 3 是 WinUI 的早期名称,首次作为 Windows 应用 SDK 的一部分提供。
总之,WinUI 是 WinUI 框架的最新和最高级版本,WinUI 2 是 UWP 的控件库,WinUI 3 是 WinUI 的早期标签。 除非特别指的是 WinUI 2,否则请使用“WinUI”。
使用 Windows 应用 SDK 和 WinUI 生成应用时,是否正在生成“WinUI 应用”?
是 — “WinUI 应用”是建议的术语。 WinUI 应用称为“WinUI 应用”,因为 WinUI 2 不是应用类型,而是 UWP 应用中使用的一组组件。
我是否可以通过逐步将 WinUI 2 组件替换为 WinUI 组件来增量更新我的使用 WinUI 2 控件的 UWP 应用到 WinUI?
否。 Windows 应用 SDK 不能在 UWP 应用中使用,WinUI 2 不能与 WinUI 混合。 请参阅从 UWP 迁移到 Windows 应用 SDK。
将 UWP 应用迁移到 WinUI 有多困难?
迁移 UI 组件通常很简单(对于 C# 和 C++/WinRT)。 否则,迁移成本主要取决于:
- 项目文件和 MSBuild 自定义: 迁移工作因高级 MSBuild 使用情况而异。
- .NET API 迁移: 使用 .NET 的 UWP 应用必须移动到 .NET 6 或更高版本。 在许多情况下,采用 .NET 6 非常简单。
- UI 组件库: 库必须具有面向 WinUI 的版本。
- 如果 UWP 应用是用现在取代的 C++/CX 编写的,则需要一些源代码移植。 请参阅从 C++/CX 移动到 C++/WinRT。
有关详细信息,请参阅 从 UWP 迁移到 Windows 应用 SDK。
如果我在应用商店中有现有的 UWP 应用,是否可以使用相同的标识符发布新的打包的 WinUI 应用?
是的,可以在不更新应用程序标识的情况下发布升级的应用。 旧版本的用户将更新为新版本。 这仅适用于桌面应用。 Xbox、HoloLens 和 Surface Hub 应用无法迁移到 WinUI。
如何打包/分发 WinUI 应用?
请参阅部署概述。
在哪里可以找到 Windows 应用 SDK 迁移指南?
如果想要使用 WinUI,是否需要使用 XAML 标记?
否。 可以在代码中创建 UI 控件。 但是,在声明性 XAML 标记中表示 UI 提供了许多好处,包括改进的开发人员体验。
- 从 UWP 迁移到 WinUI:可以重复使用许多 XAML 和 UI 组件,但需要一些语法调整。
- 从 WPF 迁移到 WinUI:许多概念都延续了,但控件集和 API 有所不同。
Visual Studio 是否具有 WinUI 的设计图面/UI 设计器?
还没有。 这是 WinUI 开发人员体验中的已知差距。 XAML 热重载等工具可在许多情况下提供帮助。 用于 WinUI 的 Visual Studio UI 设计工具的开发工作已在 Windows 应用 SDK 1.7 下启动,但其发布时间表尚未确定。
Windows 应用 SDK 是否包括 WinUI?
是的。 WinUI 作为 Windows 应用 SDK 的一部分提供。
Windows 应用 SDK 是否包括 WinUI 2?
否。 WinUI 2 是 UWP 平台的一部分。
WinUI 2 和 WinUI 是否基于同一技术构建?
并不全面。 虽然 WinUI 最初从 WinUI 2 代码库开始,但它们是不同的技术。 两者都是基于 XAML 的 UI 框架,适用于 .NET 和C++,但 WinUI 2 和 WinUI 彼此不兼容。
是否可以在不使用 Windows 应用 SDK 的情况下使用 WinUI?
否。 WinUI 作为 Windows 应用 SDK 的一部分提供。
是否可以在未打包的应用中使用 WinUI?
是的。 Windows 应用 SDK(包括 WinUI)中的所有技术都适用于未打包的应用。
XAML 岛和 WinUI 之间的区别是什么?
XAML 岛使你可以与其他框架(如 WinForms 和 WPF)中的现有 Win32 UI 一起托管基于 XAML 的新式控件。
如今,XAML 岛支持 大多数 系统 XAML 和 WinUI 2 控件。 有关更多详细信息,请参阅 桌面应用中的 Host WinRT XAML 控件(XAML 岛 )。 从 Windows 应用 SDK 1.4 开始,支持托管 WinUI 控件。
如果我创建 WinUI 应用,它将在 Windows 11 和 Windows 10 上看起来很新?
是的。 在打包和未打包方案中,应用 UI 将在所有受支持的 Windows 11 和 Windows 10 版本(最早到版本 1809)上继承最新的 Fluent UI 设计原则。
是否可以在使用 Windows 应用 SDK 生成的应用中使用 Mica 或 Acrylic 背景?
是的。 请参阅在适用于 Windows 11 的桌面应用中应用云母或亚克力材料。
在哪里可以找到 WinUI 示例?
请参阅示例和资源。 一些值得注意的存储库:
- WindowsAppSDK 示例:演示如何使用特定的 Windows 应用 SDK API 集。
- 特定于 Windows 主题的示例:包含“ 创建 WinUI 应用 ”教程中使用的 WinUI 备注示例。
- WinUI 库:展示 WinUI 和 Windows 应用 SDK。 也可在 Microsoft 应用商店中使用。
如果我已在 WPF 中投入了大量资金,我是否应继续使用 WPF 或考虑迁移到 WinUI?
如果已在 WPF 中投入了大量资金,则可以继续将其用于现有应用。 WPF 是一个成熟的稳定框架,通常用于构建 Windows 桌面应用。
请考虑使用 .NET 升级助手将 . NET Framework WPF 应用迁移到最新的 .NET 平台。 它分析代码库,并提供更新代码的指导。
如果我生成新的 WPF 应用,与其他新的 Windows 应用相比,它看起来会过时吗?
使用 .NET 9 或更高版本开发 WPF 应用程序时,可以确保应用与 Windows 11 的时尚现代外观匹配。 WPF 的新 Fluent 主题引入了当代 Windows 11 美学,并集成了浅色/深色模式和系统主题色支持。 这可使应用的外观现代化,并提供美观、凝聚力良好的用户体验。
我的团队可以舒适地构建 WinForms 应用,它符合我们的需求。是否应考虑迁移到 WinUI 或其他框架?
如果 WinForms 满足你的需求,并且团队对它感到满意,则可以继续使用 WinForms 进行现有应用。 WinForms 是一个成熟且稳定的框架,通常用于 Windows 桌面开发。
WinForms 团队继续投资该平台。 一些当前投资领域包括:
- 对常见控件的异步支持
- 深色模式
- 布局灵活性
- 桌面安全功能,如剪贴板访问
跨平台本机开发
生成面向 Windows 的跨平台本机应用有哪些原因?
如果面向多个 OS 平台的用户,请使用 .NET MAUI 或 React Native 构建跨平台应用可提供以下几个优势:
- 达到: 跨平台应用可跨不同设备和作系统访问更大的受众。
- 代码重用: 跨平台重用代码可缩短开发时间和成本。 为 Windows、Android、iOS 和 macOS 构建单独的应用可能极其昂贵。
- 一致的用户体验: 跨平台框架有助于跨平台提供一致的外观。
- 集成: 跨平台应用仍可与特定于平台的服务集成,以提供全面的体验。
我能否确信 .NET MAUI 应用在 Windows 上运行良好?
生成适用于 Windows 的 .NET MAUI 应用时,输出是 WinUI 应用。 在开发过程中,.NET MAUI 跨平台提供单个 .NET 体验,但它在后台生成特定于平台的代码。 这可确保 .NET MAUI 应用在每个平台上都表现良好,并提供本机用户体验。
.NET MAUI 如何跨每个平台提供本机设备 API?
.NET MAUI 跨 Windows、iOS、Android 和 macOS 提供统一的 .NET 体验。 它将 60 多个特定于平台的 API 抽象化为单个跨平台 API 集,涵盖存储、网络和设备传感器等领域。 还可以使用依赖项注入访问其他特定于平台的 API,以提供每个平台的专用实现。
如果最终想要面向跨平台方案,是否可以从 WinUI 开始,稍后集成 .NET MAUI?
目前不是。 尽管 .NET MAUI 在 Windows 上运行时使用 WinUI,但希望面向多个平台的团队应从 .NET MAUI 或 React Native for Desktop 开始。
我们的团队具有强大的 Web 前端开发技能。是否应考虑使用 React Native for Desktop?
具有强大 Web 开发体验的团队可能需要考虑 React Native for Desktop。 它包括适用于 Windows 和 macOS 的 React Native。 借助“学习一次,随时随地编写”方法,现有 JavaScript、TypeScript 和 React 技能可用于生成本机 Windows 和 macOS 应用。
React Native for Desktop 将 UI 直接呈现到本机基元,从而提供本机性能和平台功能。
请参阅 React Native for Desktop 文档 以开始使用。
React Native for Desktop 是否支持任何其他 Windows 设备?
React Native 应用可以部署到 Windows 10 及更高版本支持的所有设备,包括电脑、平板电脑、2 in-1、Xbox 和混合现实设备。
如果想要生成在 Windows 和 Xbox 上运行的应用,我应该使用什么?
如果你的应用需要支持 Xbox、HoloLens 或 IoT,建议使用 UWP。 Windows 应用 SDK 不支持这些平台。 对于游戏开发,请使用 Microsoft游戏开发工具包。
如果想要生成在 Windows 和 Surface Hub 上运行的应用,我应该使用什么?
如果同时面向 Windows 和 Surface Hub,建议使用 UWP。
混合和 Web 开发
什么是混合应用,为什么应考虑生成混合应用?
混合应用混合了 Web 和本机应用开发的最佳方案。 其核心是使用 HTML、CSS 和 JavaScript 等 Web 技术构建的,并包装在本机容器中,该容器提供对某些本机平台功能和硬件的访问权限。 还可以通过应用商店分发它们。
主要优势是,混合应用允许你构建可在多个本机平台和 Web 上运行的单个应用,从而减少开发时间和成本。 混合应用开发平台的示例包括:
- 桌面应用的电子
- 移动应用的 Ionic
- 用于跨平台应用的 .NET MAUI Blazor 混合技术
如何在 Windows 上构建具有原生体验的渐进式 Web 应用 (PWA) ?
什么是 .NET MAUI Blazor 混合应用?
使用 .NET MAUI,Blazor 应用可以在 Windows、iOS、Android 和 macOS 上本机运行。 这样,就可以创建混合客户端应用,将 Blazor 和 .NET MAUI 组件合并到单个本机客户端应用中,并完全访问本机平台功能。
在 ASP.NET Core Blazor 混合版中了解详细信息。
是否需要使用 Blazor 创建 .NET MAUI 混合应用的 Web 组件?
否。 从 .NET 9 开始,.NET MAUI 包括一个 HybridWebView 控件,该控件允许在本机应用中托管其他基于 JavaScript 的 UI。
这样,便可以在 .NET MAUI 应用中托管 Angular、React、Vue 或其他 HTML/JavaScript 应用。 混合控件在 C# 和 JavaScript 之间提供互作,因此 C# 代码可以调用 JavaScript 函数,反之亦然。
任何其他本机应用类型是否可以托管 Blazor 混合组件?
是的。 WPF 和 WinForms 应用还可以托管 Blazor 混合组件,从而将新式 Web UI 添加到现有应用。 .NET Framework 上构建的 WPF 或 WinForms 应用不支持此功能。
我的整个应用是否需要混合应用,或者是否可以混合和匹配本机组件和混合组件?
本机组件和混合组件可以在应用中混合。 例如,应用的核心可能是使用 .NET MAUI 组件构建的,而混合组件提供其他功能。 这允许将本机组件的性能和功能与混合组件的灵活性和成本效益相结合。
我的构建选择是什么。基于 NET 的 Web 应用在 Windows 上的新式浏览器上看起来很棒?
Web 应用提供最广泛的客户端应用平台。 创建美丽的 .NET Web 应用的选项包括:
- 使用 Razor Pages ASP.NET Core 应用
- ASP.NET Core MVC 应用
- ASP.NET Core Blazor 应用,支持托管模型选项:
- Blazor WebAssembly
- Blazor Server
现在可以在组件级别配置 Blazor 托管模型,从而在 Blazor 服务器应用中托管 Blazor WebAssembly 组件等方案。
有关更多详细信息 ,请参阅 ASP.NET Core 文档 。
选择一种方法并了解Microsoft的投资
生成面向 Windows 的应用有很多框架选项!如何决定?
Windows 是一个支持许多技术的开放平台。 下面是一些可帮助你选择平台的条件:
- 你是构建 Windows 优先还是跨平台?
- 你已有哪些语言或技能 — .NET、JavaScript,还有什么内容?
- 是否需要访问特定于 Windows 的 API?
- 哪种框架的功能最符合应用的要求?
- 有关其他比较因素,请参阅 此表 。
对于许多业务应用,团队通常根据现有技能以及团队最舒适的使用方式进行选择。
如何为 Web 应用选择最佳开发方法?
为 Web 应用选择开发方法时,请考虑以下事项:
- 建议使用 Blazor 使用 .NET 生成前端 Web 应用。 它允许你使用 .NET 生成前端和后端,从而节省时间和成本,并且它特别适用于企业应用。
- 如果要利用现有的 JavaScript 技能或需要与已建立的 JS 库或框架集成,JavaScript Web 应用仍然有意义。
- 使用旧框架(如 Web 窗体、MVC 或 Razor Pages)的现有应用仍受支持,可以继续开发和维护。
谁正在使用 WinUI 生成应用?
许多客户今天都在使用 WinUI 进行构建,包括 Adobe 和 Apple:
- Adobe Integration,一个免费的绘画和绘画应用。
- Apple 的 Apple Music、 Apple TV 和 Apple Devices 应用是使用 WinUI 和 Windows 应用 SDK 构建的。
Microsoft还生成了许多 WinUI 应用,例如 Windows 11 文件资源管理器和照片应用。
谁正在构建 .NET MAUI 应用?
许多客户(包括Microsoft)都使用 .NET MAUI 构建跨平台应用。 例如, Microsoft Azure 移动应用 是使用 .NET MAUI 生成的。
详细了解 .NET 客户展示。
谁正在生成 WPF 应用?
大多数Microsoft Visual Studio UI 都是使用 WPF 生成的。 Visual Studio IDE 本身是复杂高性能 WPF 应用的主要示例。
谁正在构建 Blazor 应用?
GE Digital 的 FlightPulse 航空公司系统使用 Blazor 来配置飞行员看到的后端配置,将传感器数据和分析直接引入飞行员,以提高安全性和效率。
在 .NET 网站上查看更多 Blazor 客户案例 。
UWP 和 WinUI 2
UWP 应用是否可以分发到 Microsoft 应用商店之外?
是的。 如果 MSIX 包已签名,则签名证书在目标设备上必须有效且可信。
是否可以将 UWP XAML UI 控件与 Win32、WPF 或 WinForms UI 控件混合?
是 — XAML 岛启用此功能。 请参阅 有关 XAML 群岛的详细信息。
打包、部署和更新
打包、解压缩和打包到外部位置的应用之间有何区别?
有关打包、未打包以及与外部位置的应用一起打包的定义,请参阅 部署概述。 该主题还说明每个选项的优缺点。
我的 WinUI 应用是否会自动更新以供最终用户使用?
WinUI 应用可以通过应用商店、.appinstaller 文件或现有 MSI 或 setup.exe 包传递。 应用商店和 AppInstaller 为启用了自动更新的最终用户支持自动更新,但 MSI/setup.exe 应用必须提供自己的更新机制。
是否可以在不使用 MSBuild 的情况下使用 Windows 应用 SDK?
一般情况下,不。 WinUI 和 Windows 应用 SDK 需要 MSBuild,这就是为什么 Visual Studio 是使用 MSBuild 进行开发的先决条件。 虽然在技术上可以生成未将 WinUI 与其他工具链配合使用的 Windows 应用 SDK 应用,但不受支持。
性能和优化
如何使 Windows 应用对最终用户感觉很棒?
请参阅使应用适用于 Windows。
Compatibility
我的用户是否必须更新 Windows 才能使用我的 WinUI 应用?
具有 Windows 10 版本 1809 或更高版本的用户无需更新其 OS 即可安装 WinUI 应用。
是否可以使用 WinUI 应用面向 Arm64?
是的。
弃用和迁移
UWP/WinUI 2 是否弃用?
否。 UWP 和 WinUI 2 仍受支持,并继续接收 bug、可靠性和安全修补程序。 但是,大多数新功能和功能都会添加到 WinUI。
提供对 .NET 9 的 UWP 支持。 此选项为使用最新 .NET 版本的 UWP 应用提供现代化路径。
.NET 9 UWP 支持的目标是:
- 为想要迁移到 WinUI 的开发人员提供更好的迁移路径。
- 删除 .NET Native 上的依赖项,以便开发人员可以从最新的 .NET 和 C# 功能中受益。
有关详细信息,请参阅博客文章:使用支持 .NET 9 和本机 AOT 的 UWP 预览版将您的 UWP 应用程序现代化。
何时应将 UWP/WinUI 2 应用迁移到 WinUI?
如果 UWP 开发人员对 UWP 及其功能集感到满意,则不应感到迁移压力 — 对于许多应用,正确的选择可能是留在 UWP 上。
想要从最新的 Windows 平台和 .NET 投资中受益的应用应考虑迁移到 Windows 应用 SDK。 请参阅从 UWP 迁移到 Windows 应用 SDK。
何时应*不* 将 UWP + WinUI 2 应用迁移到 WinUI?
如果要为 Xbox、Surface Hub 或 HoloLens 构建,请继续使用 UWP。
WPF 是否弃用?
否。 WPF 受支持、建议并继续接收功能更新。 请参阅 GitHub上的
WPF 路线图。
WinForms 是否弃用?
否。 WinForms 受支持并继续接收功能更新。 请参阅 GitHub上的
Windows 窗体路线图。
Windows 运行时 (WinRT) 是否已弃用?
否。 WinRT 是一个应用程序二进制接口(ABI),可跨多种语言进行互作。 WinRT 是 COM 的演变,Windows 应用 SDK 通过 WinRT API 提供其大部分功能。