通过


Windows App开发常见问题解答

本常见问题解答提供有关 Windows 应用程序开发的常见问题的解答,包括有关为项目选择合适的框架的指导。 涵盖的主题包括:

  • 入门和 Windows 应用开发现状。
  • 使用 WinUI 3、Windows Presentation Foundation(WPF)和Windows Forms(WinForms)进行本机仅限 Windows 的应用开发。
  • Windows 软件开发工具包(SDK)和Windows App SDK。
  • 将 Windows 作为跨平台开发策略的一部分。
  • 使用 .NET MAUI、Blazor 和 ASP.NET Core 进行混合和 Web 应用开发。
  • 如何在了解Microsoft的投资时选择一种策略。

Windows应用开发格局

在哪里可以找到 Windows 开发技术的简单概述?

有关当今 Windows 开发人员选项的出色回顾,请观看最新的 Windows 开发聊天集,选择理想的开发平台,讨论 WinUI、.NET MAUI、React Native、Blazor 和渐进式Web Apps(PWA)。

还可以参考适用于 Windows 开发人员的应用开发选项概述

为什么在云服务时代的现代数字化转型中,客户端应用开发仍然至关重要?

在cloud services时代,客户端应用开发仍然是现代数字化转型的关键组成部分。 对于开发人员来说,构建客户端应用程序不仅对于访问至关重要,而且对于在用户设备上提供响应式有意义的交互至关重要。

下面是客户端应用很重要的原因:

  • Device Reach: 全球有超过 15 亿个 Windows 设备和 50 多亿 Android 和 iOS 设备,客户端应用允许你直接将应用程序带到他们选择的设备上。
  • 智能服务的门户: 客户端应用通常是用户与服务的第一次交互。 它们提供丰富的交互式界面,使你能够展示智能功能并将产品与其他产品区分开来。
  • 云集成的可扩展性:一个良好集成的客户端应用可以毫不费力地与后端云服务同步,从而在用户群增长时实现实时数据访问和无缝扩展性。
  • 提高工作效率和用户忠诚: 经过深思熟虑的应用可以提高工作效率,并使用户随着时间的推移与产品或服务保持参与。

原生仅限 Windows 的应用开发

什么是Windows App SDK?

Windows App SDK是一个 Windows 应用程序开发平台,可用于创建美观、现代、向后兼容的(向下到 Windows 10 1809)桌面应用。 WinUI 是附带Windows App SDK的 UI 框架。

Windows App SDK与 Windows SDK 之间有何区别?

两者都是软件开发工具包 (SDK),可用于构建 Windows 应用。

Windows App SDK是一个新的开发平台,可用于生成可在 Windows 版本(到 Windows 10 1809)中安装的新式桌面应用。 使用 Windows App SDK 生成时,可以使用最新的 Windows 开发平台功能。 Windows App SDK包括 WinUI。

Windows SDK 是一个开发平台,可用于构建 UWP 应用和 Win32/桌面应用。 它是围绕与特定版本的 OS 耦合的 Windows API 设计的。

Windows App SDK不会替换 Windows SDK。 相反,Windows App SDK补充 Windows SDK。 它围绕已使用 Windows SDK 可访问的丰富 Windows OS API 目录提供了一个方便的、与 OS 分离的抽象。 使用Windows App SDK构建的应用仍可能使用 Windows SDK API,具体取决于功能需求。 随着时间的推移,更多的 Windows SDK 功能将进入Windows App SDK。

我正在构建一个新团队来开发仅限 Windows 的应用。为何应选择使用本机 Windows 框架(如 WinUI、WPF 或 WinForms?

下面是为仅限 Windows 的应用选择本机 Windows 框架的一些原因:

  • 性能: 本机 Windows 框架经过优化,以利用新式 Windows 硬件,提供快速响应的用户体验。
  • 集成: Windows 附带了各种 API,这些 API 仅支持在 Windows 上提供复杂的体验。 本机框架提供与这些功能和 API 的深度集成。
  • 本机用户体验: 本机框架跨 Windows 设备提供一致的体验,确保你的应用在任何地方都能正常运行。
  • 脱机支持: 本机框架支持脱机方案,即使没有 Internet 连接,应用也能正常运行。
  • Monetization: 原生框架受到Microsoft的积极维护和支持,确保能够访问最新的更新和功能。
我应该使用哪种框架来利用Microsoft在Windows app开发方面的最新投资?

如果要构建一个新的仅限 Windows 的应用,我们建议使用 WinUI。 WinUI 是用于Windows app开发的最新本机 UI 框架,旨在跨各种 Windows 设备工作。 它提供了一个现代灵活的 UI 框架,用于创建视觉吸引力和交互式 Windows 应用。 WinUI 是Windows App SDK的一部分,最适合最新版本的 Windows。

我可以在现有的 Windows 应用中使用 Windows App SDK/WinUI 吗?

请注意,WinUI(UI 框架)附带Windows App SDK(Windows 平台开发框架)。

通常,除非应用已准备好完全迁移其 UI 框架,否则无法使用 WinUI。 名为XAML 岛的功能正在开发中,以便在其他 UI 框架(如 WPF、Win32)中托管 WinUI 内容。

Windows App SDK的元素通常可用于桌面应用,具体取决于现有应用的生成方式。 Windows App SDK不支持 UWP 应用。

这意味着WPF/MFC/WinForms应用可以使用与 WinUI 无关的Windows App SDK API。 示例包括应用生命周期、窗口化和 Toast 通知。

有关详细信息,请参阅 在现有项目中使用 Windows App SDK

我是否需要使用 Visual Studio 生成 WinUI 应用?

强烈建议使用 Visual Studio 2022 版本 17.10 或更高版本进行 WinUI 开发。 最新的Visual Studio版本提供丰富的开发功能,如Hot Reload,并包括简化设置的 WinUI 应用程序开发工作负载。

其他 IDE 和工作流可能正常工作,但 Visual Studio目前是唯一正式支持的 WinUI IDE。 请注意,编译 XAML 或 WinUI 项目需要 MSBuild

WinUI 与适用于 UWP 的 WinUI 有何区别?

WinUI(以前称为 WinUI 3)是用于Windows app开发的最新本机 UI 框架。 它提供了一个现代灵活的 UI 框架,用于创建视觉吸引力和交互式 Windows 应用。 WinUI 是Windows App SDK的一部分,最适合最新版本的 Windows。

WinUI for UWP (以前称为 WinUI 2)是一组基于 UWP 构建的 UI 控件和样式。 它为 UWP 应用提供新式外观,专为Windows 10而设计。

当我使用 Windows App SDK 和 WinUI 生成应用时,是否正在生成“WinUI 应用”?

是 — “WinUI 应用”是建议的术语。 WinUI 应用称为“WinUI 应用”,因为 WinUI for UWP 不是应用类型,而是 UWP 应用中使用的一组组件。

我可以通过逐步使用 WinUI 组件替换 WinUI for UWP 组件来增量更新我包含 WinUI for UWP 控件的 UWP 应用以迁移至 WinUI 吗?

否。 Windows App SDK不能在 UWP 应用中使用,而 UWP 的 WinUI 不能与 WinUI 混合。 请参阅《从 UWP 迁移到 Windows 应用 SDK》文档。

将 UWP 应用迁移到 WinUI 有多困难?

迁移 UI 组件通常很简单(对于 C# 和 C++/WinRT)。 否则,迁移成本主要取决于:

  1. Project 文件和 MSBuild 自定义:迁移工作因高级 MSBuild 使用情况而异。
  2. .NET API 迁移:使用 .NET 的 UWP 应用必须移动到 .NET 6 或更高版本。 在许多情况下,采用 .NET 6 非常简单。
  3. UI 组件库: 库必须具有面向 WinUI 的版本。
  4. 如果 UWP 应用是用现在取代的 C++/CX 编写的,则需要一些源代码移植。 请参阅从 C++/CX 移动到 C++/WinRT

有关详细信息,请参阅 从 UWP 到 Windows App SDK

如果我在应用商店中有现有的 UWP 应用,是否可以使用相同的标识符发布新的打包的 WinUI 应用?

是的,可以在不更新应用程序标识的情况下发布升级的应用。 旧版本的用户将更新为新版本。 这仅适用于桌面应用。 Xbox、HoloLens 和 Surface 中心应用无法迁移到 WinUI。

我如何打包和分发我的 WinUI 应用?

请参阅部署概述

在哪里可以找到Windows App SDK迁移指南?

请参阅《从 UWP 迁移到 Windows 应用 SDK》文档。

如果想要使用 WinUI,是否需要使用 XAML 标记?

否。 可以在代码中创建 UI 控件。 但是,在声明性 XAML 标记中表示 UI 提供了许多好处,包括改进的开发人员体验。

  • 从 UWP 迁移到 WinUI:可以重复使用许多 XAML 和 UI 组件,但需要一些语法调整。
  • 从WPF迁移到 WinUI:许多概念都延续了,但控件集和 API 有所不同。
Visual Studio 是否有适用于 WinUI 的设计界面/用户界面设计器?

还没有。 这是 WinUI 开发人员体验中的已知差距。 XAML Hot Reload 等工具可在许多方案中提供帮助。 已开始为 Windows App SDK 1.7 中的 WinUI 开发 Visual Studio UI 设计器,但其发布时间尚未确定。

Windows App SDK 包括 WinUI 吗?

是的。 WinUI 作为Windows App SDK的一部分提供。

Windows App SDK 是否包含适用于 UWP 的 WinUI?

否。 WinUI for UWP 是 UWP 平台的一部分。

WinUI for UWP 和 WinUI 是否基于同一技术构建?

并不全面。 虽然 WinUI 最初从 WinUI for UWP 代码库开始,但它们是不同的技术。 这两个框架都是基于 XAML 的 UI 框架,可跨 .NET 和 C++ 工作,但适用于 UWP 和 WinUI 的 WinUI 彼此不兼容。

我可以不使用 Windows App SDK 即可使用 WinUI 吗?

否。 WinUI 作为Windows App SDK的一部分提供。

是否可以在未打包的应用中使用 WinUI?

是的。 Windows App SDK中的所有技术(包括 WinUI)都适用于未打包的应用。

XAML 岛和 WinUI 之间的区别是什么?

XAML 岛允许你与其他框架(如 WinForms 和 WPF)中的现有 Win32 UI 一起托管基于 XAML 的新式控件。

如今,XAML 岛支持 大多数 系统 XAML 和 WinUI 用于 UWP 控件。 有关更多详细信息,请参阅 桌面应用中的 Host WinRT XAML 控件(XAML 岛 )。 从 Windows App SDK 1.40 开始,支持托管 WinUI 控件。

如果我创建一个 WinUI 应用,它在 Windows 11 和 Windows 10 上是否会看起来现代?

是的。 在打包和非打包情况下,应用的 UI 将在支持的所有版本的 Windows 11 和 Windows 10 上继承最新的 Fluent UI 设计原则,适用于从版本 1809 开始的所有版本。

我可以在使用 Windows App SDK 生成的应用中使用 Mica 或 Acrylic 背景吗?

是的。 请参阅 在适用于 Windows 11 的桌面应用中应用 Mica 或 Acrylic 材料

在哪里可以找到 WinUI 示例?

请参阅示例和资源。 一些值得注意的存储库:

如果我已在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 集,涵盖storage、网络和设备传感器等领域。 还可以使用依赖项注入访问其他特定于平台的 API,以提供每个平台的专用实现。

我可以从 WinUI 开始,如果最终想要面向跨平台场景,可以稍后集成 .NET MAUI 吗?

目前不是。 尽管.NET MAUI 在 Windows 上运行时使用 WinUI,但希望面向多个平台的团队应从 .NET MAUI 或 React Native for Desktop 开始。

我们的团队具有强大的 Web 前端开发技能。是否应考虑使用 React Native for Desktop?

具有强大 Web 开发体验的团队可能需要考虑 React Native for Desktop。 它包括 React Native for WindowsmacOS。 借助“学习一次,随时随地编写”方法,现有 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 和 mixed reality 设备。

如果想要生成在 Windows 和 Xbox 上运行的应用,我应该使用什么?

如果你的应用需要支持 Xbox、HoloLens 或 IoT,建议使用 UWP。 Windows App SDK不支持这些平台。 对于游戏开发,请使用 Microsoft Game Development Kit

如果我想要开发可以在 Windows 和 Surface Hub 上运行的应用程序,我应该使用什么?

如果要同时面向 Windows 和 Surface 中心,建议使用 UWP。

混合和 Web 开发

什么是混合应用,为什么应考虑生成混合应用?

混合应用混合了 Web 和本机应用开发的最佳方案。 其核心是使用 HTML、CSS 和 JavaScript 等 Web 技术构建的,并封装在本机容器中,该容器允许访问某些本机平台功能和硬件。 还可以通过应用商店分发它们。

主要优势是,混合应用允许你构建可在多个本机平台和 Web 上运行的单个应用,从而减少开发时间和成本。 混合应用开发平台的示例包括:

  • 桌面应用的电子
  • 移动应用的 Ionic
  • .NET MAUI Blazor 混合跨平台应用
如何在 Windows 上构建具有本机体验的渐进式 Web 应用程序(PWA)?

请参阅 Windows 上的 Web 开发渐进式Web应用 的概述。

.NET MAUI Blazor 混合应用是什么?

使用 .NET MAUI,Blazor 应用可以在 Windows、iOS、Android 和 macOS 上本机运行。 这样,就可以创建混合客户端应用,将 Blazor 和 .NET MAUI 组件合并到单个本机客户端应用中,并将完全access到本机平台功能。

了解更多信息,ASP.NET Core Blazor Hybrid

创建 .NET MAUI 混合应用的 Web 组件需要使用 Blazor 吗?

否。 从 .NET 9 开始,.NET MAUI 包括一个 HybridWebView 控件,该控件允许在本机应用中托管其他基于 JavaScript 的 UI。

这样,便可以在 .NET MAUI 应用中托管 Angular、React、Vue 或其他 HTML/JavaScript 应用。 混合控件在 C# 和 JavaScript 之间提供互作,因此 C# 代码可以调用 JavaScript 函数,反之亦然。

任何其他本机应用类型是否可以托管 Blazor 混合组件?

是的。 WPF和 WinForms 应用还可以托管 Blazor 混合组件,从而将新式 Web UI 添加到现有应用。 WPF或基于 .NET Framework 构建的 WinForms 应用不支持此功能。

我的整个应用是否需要混合应用,或者是否可以混合和匹配本机组件和混合组件?

本机组件和混合组件可以在应用中混合。 例如,可以使用 .NET MAUI 组件生成应用的核心,而混合组件提供其他功能。 这允许将本机组件的性能和功能与混合组件的灵活性和成本效益相结合。

用于构建在 Windows 上的现代浏览器中效果出色的基于 .NET 的 Web 应用程序,我有哪些选择?

Web 应用程序拥有任何客户端应用程序平台中最广泛的覆盖范围。 创建美观的 .NET Web应用程序的选项包括:

  • ASP.NET Core 应用使用 Razor Pages
  • ASP.NET Core MVC 应用
  • ASP.NET Core Blazor 应用,具有托管模型选项:
    • Blazor WebAssembly
    • Blazor Server

现在可以在组件级别配置 Blazor 托管模型,从而在 Blazor 服务器应用中托管 Blazor WebAssembly 组件等方案。

有关详细信息,请参阅 ASP.NET Core 文档

选择一种方法并了解微软的投入

有这么多的框架选项可以用于开发面向 Windows 的应用!我该如何决定呢?

Windows 是一个支持许多技术的开放平台。 下面是一些可帮助你选择平台的条件:

  • 你是构建 Windows 优先还是跨平台?
  • 你已有哪些语言或技能 — .NET、JavaScript,还有什么内容?
  • 是否需要访问特定于 Windows 的 API(应用程序编程接口)?
  • 哪种框架的功能最符合应用的要求?
  • 有关其他比较因素,请参阅 此表

对于许多业务应用,团队通常根据现有技能以及团队最舒适的使用方式进行选择。

我如何选择我的 Web 应用的最佳开发方法?

为 Web 应用选择开发方法时,请考虑以下事项:

  • 建议使用 Blazor 通过 .NET 生成前端web apps。 它允许你使用.NET生成前端和后端,从而节省时间和成本,这尤其适用于企业应用。
  • 如果要利用现有的 JavaScript 技能或需要与已建立的 JS 库或框架集成,JavaScript web apps仍然有意义。
  • 使用旧框架(如 Web 窗体、MVC 或 Razor Pages)的现有应用仍受支持,可以继续开发和维护。
谁正在使用 WinUI 生成应用?

许多客户今天都在使用 WinUI 进行构建,包括 Adobe 和 Apple:

Microsoft还生成了许多 WinUI 应用,例如Windows 11 File Explorer和照片应用。

谁正在构建今天的 .NET MAUI 应用?

许多客户(包括Microsoft)都使用 .NET MAUI 构建跨平台应用。 例如,Microsoft Azure 移动应用是使用 MAUI .NET生成的。

有关详细信息,请参阅 .NET 客户展示

今天谁正在构建WPF应用?

大多数Microsoft Visual Studio UI 都是使用 WPF 构建的。 Visual Studio IDE 本身是复杂高性能WPF应用的主要示例。

谁正在构建 Blazor 应用?

GE Digital 的 FlightPulse 航空公司系统使用 Blazor 进行飞行员看到的后端配置,直接将传感器数据和分析引入飞行员,以提高安全性和效率。

在 .NET 网站上查看更多 Blazor 客户案例

打包、部署和更新

打包、解压缩和打包到外部位置的应用之间有何区别?

有关打包、未打包以及与外部位置的应用一起打包的定义,请参阅 部署概述。 该主题还说明每个选项的优缺点。

我的 WinUI 应用是否会自动更新以供最终用户使用?

WinUI 应用可以通过应用商店、.appinstaller 文件或现有 MSI 或 setup.exe 包传递。 应用商店和 AppInstaller 为启用了自动更新的最终用户支持自动更新,但 MSI/setup.exe 应用必须提供自己的更新机制。

我可以在不使用 MSBuild 的情况下使用 Windows App SDK 吗?

一般情况下,不。 WinUI 和 Windows App SDK 需要 MSBuild,这就是为什么 Visual Studio 是使用它们进行开发的先决条件。 虽然在技术上可以生成不使用 WinUI 的 Windows App SDK 应用并使用其他工具链,但这样做不受支持。

性能和优化

我能做些什么来使我的Windows app对最终用户感觉很棒?

请参阅 Windows 应用程序开发 - 最佳做法Windows app性能和基础知识概述

Compatibility

我的用户是否必须更新 Windows 才能使用我的 WinUI 应用?

具有 Windows 10 版本 1809 或更高版本的用户无需更新其 OS 即可安装 WinUI 应用。

是否可以使用 WinUI 应用面向 Arm64?

是的。

弃用和迁移

您是否弃用了 UWP/WinUI for UWP?

否。 UWP 和适用于 UWP 的 WinUI 仍受支持,并继续接收 bug、可靠性和安全性修复更新。 但是,大多数新功能和功能都会添加到 WinUI。

.NET 9 的 UWP 支持可用。 此选项使用最新的.NET版本为 UWP 应用提供现代化路径。

.NET 9 UWP 支持的目标包括:

  1. 为想要迁移到 WinUI 的开发人员提供更好的迁移路径。
  2. 删除对 .NET Native 的依赖项,以便开发人员可以从最新的.NET和 C# 功能中受益。

有关详细信息,请参阅博客文章:通过支持 .NET 9 和本机 AOT 的预览版,现代化您的 UWP 应用

何时应将 UWP/WinUI for UWP 应用迁移到 WinUI?

如果 UWP 开发人员对 UWP 及其功能集感到满意,则不应感到迁移压力 — 对于许多应用,正确的选择可能是留在 UWP 上。

想要受益于最新 Windows 平台和.NET投资的应用应考虑迁移到Windows App SDK。 请参阅《从 UWP 迁移到 Windows 应用 SDK》文档。

何时不应该将 UWP + WinUI for UWP 应用程序迁移到 WinUI?

如果要为 Xbox、Surface 中心或 HoloLens 构建,请继续使用 UWP。

WPF已弃用?

否。 WPF受支持、建议并继续接收功能更新。 请参阅 GitHub 上的 WPF 路线图。

WinForms 是否弃用?

否。 WinForms 受支持并继续接收功能更新。 请参阅 GitHub 上的 Windows Forms 路线图。

Windows Runtime(WinRT)已弃用?

否。 WinRT 是一个应用程序二进制接口(ABI),可跨多种语言进行互作。 WinRT 是 COM 的演变,Windows App SDK通过 WinRT API 提供其大部分功能。

发行说明

在哪里可以找到 Windows App SDK 的发行说明?

可在 “新增 功能”页面上找到最新的发行说明。