Windows 应用 SDK 的稳定通道发行说明

稳定通道提供支持在生产环境中供应用使用的 Windows 应用 SDK 版本。 使用 Windows 应用 SDK 稳定版本的应用还可以发布到 Microsoft Store。

当前提供稳定通道的以下版本:

如果要将现有应用从较旧版本的 Windows 应用 SDK 升级到较新版本,请参阅将现有项目更新到 Windows 应用 SDK 的最新版本

Windows 应用 SDK 下载

注意

Windows 应用 Visual Studio 扩展 (VSIX) 已不再作为单独的下载进行分发。 它们可在 Visual Studio 内的 Visual Studio Marketplace 中使用。

版本 1.5

版本 1.5.1 (1.5.240311000)

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 1.5 的关键 bug 修复。

  • 修复了由于无法复制“map.html”而导致独立应用无法构建的问题。
  • 修复了由于拒绝有效令牌而 MapControl 无法初始化的问题。 有关详细信息,请参阅 GitHub #9324
  • 修复了 MapControl 使用蓝色背景加载的问题。 有关详细信息,请参阅 GitHub #9377
  • 修复了单击 NavigationViewItem 的 V 形无法在一次单击中正确展开或折叠的问题。 这也导致在 PaneDisplayMode="Top" 模式下单击 V 字形时,菜单显示为空白。 有关详细信息,请参阅 GitHub #9423#9426
  • 修正了一个问题,即使用触控或笔点击 NavigationViewItem 会阻止项目对未来的任何输入做出响应。 有关详细信息,请参阅 GitHub #9429
  • 修复了在 NavigationView.PaneFooter 区域中单击项目时发生的崩溃问题。 有关详细信息,请参阅 GitHub #9396
  • 修复了菜单中的图标有时显示在错误位置的问题。 有关详细信息,请参阅 GitHub #9409
  • 修复了一个问题,即亚克力在从窗口切换回来之前不会显示在菜单上。 有关详细信息,请参阅 GitHub #9406
  • 修复了 TextBox/RichEditBox 初始化期间可能发生的崩溃。 有关详细信息,请参阅 GitHub #9216
  • 修复了 NavigationView 抛出并在销毁时捕获的一些干扰异常。
  • 修复了以下问题:由于 PointerCaptureLost 消息触发不正确,“捏合缩放”手势有时会显示为平移或点击。

版本 1.5

以下部分描述了版本 1.5 的新功能和已更新功能,以及已知问题。

在现有的 Windows 应用 SDK 1.4 应用中,可以将 Nuget 包更新为 1.5.240227000(请参阅使用 NuGet 包管理器在 Visual Studio 中安装和管理包中的更新包部分)。

有关已更新的运行时和 MSIX,请参阅 Windows 应用 SDK 下载

XAML Islands 运行时和关机更新

WinAppSDK 1.4 和 WinAppSDK 1.5 对于基于 XAML Islands 的应用程序来说,当任何线程上的最后一个 XAML 窗口被关闭时,其行为是不同的。

  • 在 WinAppSDK 1.4 中,当线程上最后一个 XAML 窗口关闭时,XAML 运行时总是退出线程的事件循环。
  • 在 WinAppSDK 1.5 中:
    • 如果应用是 WinUI 桌面应用,则默认行为仍与 WinAppSDK 1.4 中的行为相同。
    • 如果将 XAML 用于 DesktopWindowXamlSource ("XAML Islands") API,则默认行为现在是 XAML 不会自动退出线程的事件循环。
    • 在这两种模式中,都可通过设置 Application.DispatcherShutdownMode 属性来更改此行为。

有关详细信息,请参阅 Application.DispatcherShutdownMode 属性的文档(如果可用)。 它可完成 GitHub 建议 #8492

在 XAML 运行时的生存期内,WinAppSDK 1.4 和 WinAppSDK 1.5 对于基于 XAML Islands 的应用程序之间存在行为差异:

  • 在 WinAppSDK 1.4 中,如果给定线程中的所有 WindowsXamlManager 对象和 DesktopWindowXamlSource 对象都已关闭或关机,或者该线程上运行的 DispatcherQueue 处于关闭状态(在此情况下,XAML 运行时会在 DispatcherQueue.FrameworkShutdownStarting 阶段关闭),则 XAML 运行时会在线程上关闭。
  • 在 WinAppSDK 1.5 中,仅当在该线程上运行的 DispatcherQueue 关闭(XAML 运行时在 DispatcherQueue.FrameworkShutdownStarting 阶段始终会关闭)时,XAML 运行时才会在线程上关闭。

有关详细信息,请参阅 WindowsXamlManager 类的文档(如果可用)。

WindowsXamlManager.InitializeForCurrentThread() 中存在行为差异:

  • 在 WinAppSDK 1.4 中,WindowsXamlManager.InitializeForCurrentThread() 会随每个调用返回 WindowsXamlManager 对象的唯一实例。
  • 在 WinAppSDK 1.5 中,如果线程上已存在一个实例,WindowsXamlManager.InitializeForCurrentThread() 则会返回现有实例。 Close/Dispose() 此时会被忽略。

WinUI Maps 控件

WinUI Maps 控件现已推出! 此控件由 WebView2 和 Azure Maps 提供支持,提供以下功能:

  • 使用地图按钮或触控进行平移和缩放。
  • 将地图的样式更改为卫星视图、地形视图或街道视图。
  • 以编程方式向地图添加带有开发人员可自定义图标的可交互图钉。
  • 针对地图在初始加载时居中的位置进行开发人员自定义。
  • 控件,用于开发人员隐藏或显示用于平移、缩放和地图样式的按钮。

WinUI 3 Maps Control

注意

若要使用 Maps 控件,则需要 Azure Maps 密钥。 若要创建密钥,请参阅用于创建 Web 应用的 Azure Maps 文档页面

Maps 控件是一个全新组件,欢迎你提供反馈,评估其未来方向!

新的 SelectorBar 控件

在 1.5 中,我们添加了一个新的 SelectorBar 控件,它允许用户在多个数据视图之间进行切换。 此控件以前在 1.5 路线图中被称为“SegmentedControl”。

WinUI 3 SelectorBar Control

CommandBarFlyout 主命令中的标签

现已更新 CommandBarFlyout 的视觉效果,以便在已对 AppBarButton 设置 Label 属性的情况下为主要命令区域中的项目显示文本标签。 以前,CommandBarFlyout 区域中的主要命令仅会显示一个图标,但现在它们则可同时显示图标和标签以提高可用性。

WinUI 3 CommandBarFlyout Labels

针对自定义环境/选项的 WebView2 支持

WinUI WebView2 控件现已公开使用自定义 CoreWebView2EnvironmentCoreWebView2ControllerOptions 来自定义基础 CoreWebView2 对象的功能。 借助此功能,应用作者便可指定要从中加载 WebView2Runtime、选择使用其他 UserDataFolder 或设置选项(如 IsPrivateModeEnabledScriptLocale)的备用路径。

针对 .NET 8 的支持

我们在最新的 1.4 服务版本中添加了对 .NET 8 的支持,但仍保留了有关使用特定于平台的 RID 的警告。 在 1.5 中,我们已完成此工作,以便该警告不再显示。

改进了调试功能和源可用性

现在,我们已将 Microsoft-ui-xaml 存储库中的代码的 GitHub 源代码服务器信息注入到公共符号中,以便调试器能自动下载源代码。 我们还对整个 WinAppSDK 中的符号进行了其他修复和改进,从而改善调试体验。

改进了调试布局循环的对应功能

在 WinUI 应用中调试布局循环可能会成为一个难题,因此在 1.5 中,DebugSettings 对象现在会公开某些选项,以便为布局流程启用改进的日志记录和断点,从而更轻松地调试和修复应用中的布局循环。

WinAppSDK 中的其他新功能

  • 增加了对 PublishSingleFile 部署模型的支持。 有关 PublishSingleFile 的详细信息,请参阅单文件部署文档
  • 添加了对屏幕阅读器支持、文本缩放支持和其他辅助功能的改进。
  • 基于我们优先处理的 GitHub bug 积压工作的各种稳定性与性能改进。

新功能会单独发布

适用于 C# 和 C++ 的 WinAppSDK Visual Studio 模板的新版本现在会通过 Visual Studio Marketplace 进行发布,且会在 1.5 发布后的几周内显示。 借助新版本,这些模板现在可独立于 WinAppSDK 版本来发布,从而能更灵活地获取客户的更新。

以前规划的其他功能

在 1.5 中,我们在针对路线图而宣布的以下功能方面取得了进展,但尚未彻底完成。 它们将继续进入 1.6 期限。

  • 选项卡式窗口
  • 针对 WebView2 的拖放支持
  • 对表视图和墨迹控件进行调查

动态照明功能已暂时从路线图中删除。

已知问题

  • 使用包含 .xaml 文件等资源的库时,可能会在运行时收到一条错误消息,其中指示未找到这些资源。 在此情况下,可能需要在项目文件中插入 <ShouldComputeInputPris>true</ShouldComputeInputPris> 以确保包含这些资源。
  • 单击 NavigationViewItem 的 V 形时,无法再通过单击而正确展开或折叠。 双击仍然有效,就像单击 NavigationViewItem 中的其他位置一样。

缺陷修复

  • 修复了 StackPanel 将间距设置应用于折叠项的问题。 有关详细信息,请参阅 GitHub 问题 #916
  • 修复了关闭其他应用窗口后滚动控件不再工作的问题。 有关详细信息,请参阅 GitHub 问题 #9292#9355
  • 修复了在渲染第一帧前将 DebugSettings.EnableFrameRateCounter 设为 true 时出现崩溃的问题。 有关详细信息,请参阅 GitHub 问题 #2835
  • 修复了针对 C++ 的潜在编译错误,其中某些标头未包含必需的依赖项。 请注意,#include 顺序更改可能会影响某些应用;例如,如果应用使用的是早于 2023 的 C++/WinRT 版本,则可能会导致 IInspectable 编译错误。 有关详细信息,请参阅 GitHub 问题 #9014
  • 修复了在 ItemsRepeaterDataTemplateElementName 不起作用的问题。 有关详细信息,请参阅 GitHub 问题 #560
  • 修复了在已启用应用内工具栏的 Visual Studio 下运行应用时出现崩溃的问题。 需要 Visual Studio 17.8 预览版 2 或更高版本才能完全获取修补程序。 有关详细信息,请参阅 GitHub 问题 #8806
  • 修复了快速滚动时 AnnotatedScrollbar 有时会崩溃的问题。
  • 修复了菜单文本有时会被截断的问题。
  • 修正了教学提示没有得到适当关注的问题。 有关详细信息,请参阅 GitHub 问题 #3257
  • 修正了在启动时将 TeachingTipTailVisibility 设置为已折叠时应用程序崩溃的问题。 有关详细信息,请参阅 GitHub 问题 #8731
  • 修复了在使用库时有关 PRI 文件处理方式的问题。 有关详细信息,请参阅 GitHub 问题 #8857
  • 修正了 1.5 试验版 2 版本中没有生成投影 DLL 的问题。 有关详细信息,请参阅 GitHub 问题 #4152
  • 修正了以下问题:RichEditBox 的文本格式弹出窗口上的省略号按钮不能正确显示操作列表。 有关详细信息,请参阅 GitHub 问题 #9140
  • 修正了以下问题:ListView 不能正确处理键盘快捷键。 有关详细信息,请参阅 GitHub 问题 #8063
  • 修正了以下问题:使用 AccessKey 关闭窗口时发生访问冲突。 有关详细信息,请参阅 GitHub 问题 #8648
  • 修复了使用 AccessKey 来关闭窗口时出现的崩溃问题。 有关详细信息,请参阅 GitHub 问题 #9002
  • 修正了影响 MenuBarMenuFlyoutItem 中的文本对齐的问题。 有关详细信息,请参阅 GitHub 问题 #8755
  • 修正了右键单击时突出显示的文本不会保持突出显示的问题。 有关详细信息,请参阅 GitHub 问题 #1801
  • 修正了关闭非活动窗口导致应用程序崩溃的问题。 有关详细信息,请参阅 GitHub 问题 #8913
  • 修正了当使用鼠标中键滚动并随后立即单击左键时可能挂起应用程序的问题。 有关详细信息,请参阅 GitHub 问题 #9233
  • 修复了当使用自定义 NavigationViewItem 时导致应用程序启动时崩溃的问题。 有关详细信息,请参阅 GitHub 问题 #8814
  • 修复了省略号按钮会不正确地生成错误的 NavigationView 问题。 有关详细信息,请参阅 GitHub 问题 #8380
  • 修复了在多窗口应用中 SystemBackdrop 无法正确渲染的问题。 有关详细信息,请参阅 GitHub 问题 #8423
  • 修复了当插入到 ObservableCollection 开头时的重复问题。 有关详细信息,请参阅 GitHub 问题 #8370

版本 1.4

版本 1.4.5 (1.4.240211001)

这是 Windows 应用 SDK 的服务版本,其中包含 1.4 版本的严重 bug 修复。

  • 修正了在使用鼠标滚轮滚动时单击鼠标按钮时可能会挂起应用程序的问题。 有关详细信息,请参阅 GitHub 问题 #9233
  • 修正了引用 NuGet 包链时出现重复资产的问题。 有关详细信息,请参阅 GitHub 问题 #8857
  • 修正了以下几个 BreadcrumbBar 问题:包括内存泄露、省略号菜单为空时崩溃,以及省略号菜单在窗口内被错误地约束。
  • 修正了释放图形资源时关闭时可能出现的崩溃。

版本 1.4.4(1.4.231219000)

这是 Windows 应用 SDK 的服务版本,其中包含 1.4 版本的严重 bug 修复。

  • 修复了 WinUI 3 诊断安全问题。
  • 修复了通过触摸激活时密码框不显示屏幕键盘的输入问题。 有关详细信息,请参阅 GitHub 问题 #8946
  • 修复了导致 Microsoft.UI.Xaml.Controls.dll 文件大小意外增长的问题。
  • 修复了设置焦点时可能导致崩溃的 CommandBarFlyout 问题。
  • 更新了对 .NET 8 RID 特定资产处理的 Windows 应用 SDK 支持。
  • 修复了导致某些交换链定位或拉伸错误的问题。

版本 1.4.3 (1.4.231115000)

这是 Windows 应用 SDK 的服务版本,其中包含 1.4 版本的严重 bug 修复。

  • 修复了一个问题:菜单可能会在短时间内以没有背景的形式显示。
  • 修复了特定多显示器场景下可能发生的崩溃。
  • 修复了上下文菜单可能出现在屏幕外的问题。
  • 修复了窗口样式和最大化行为的问题。 有关详细信息,请参阅 GitHub 问题 #8996
  • 修复了 Islands 的一个问题:可能会意外地从另一个控件中夺取焦点。
  • 修复了 NavigationView 上的 Tab 键顺序问题。
  • 修复了标题栏顶部可能会出现白色条的呈现问题。 有关详细信息,请参阅 GitHub 问题 #8947
  • 各种性能修复。

版本 1.4.2 (1.4.231008000)

这是 Windows 应用 SDK 的服务版本,其中包含 1.4 版本的严重 bug 修复。

  • 修复了因内存过多和对象分配而导致的 explorer.exe 崩溃问题。
  • 修复了阻止后退按钮正常工作的标题栏交互问题。
  • 修复了多次包含某个源文件时生成警告的问题。
  • 修复了影响上下文菜单性能的问题。
  • 修复了使目标 .exe 始终指向 WindowsApps 文件夹中包的相同位置的 .lnk 快捷方式问题。
  • 修复了影响以特定字体正确呈现印度语文本的 DWriteCore 问题。
  • 修复了列表视图中无法使用键盘上的 Tab/Shift + Tab 在嵌套的选定项之间正确导航的问题
  • 修复了第二次展开 ComboBox 后通过触摸中断滚动 ComboBox 项的问题。 有关详细信息,请参阅 GitHub 问题 #8831
  • 修复了 WinAppSDK 包不包含某些语言的 WinUI 本地化资源的问题。
  • 修复了文件资源管理器和 XAML 的用户首选语言的显示方式之间的不一致。
  • 修复了导致活动选项卡下显示细线的文件资源管理器技术问题。
  • 修复了某些框架提供的键盘加速器未正确本地化的问题。 有关详细信息,请参阅 GitHub 问题 #2023
  • 修复了点击时重复滚动的 RepeatButton 控件的问题。
  • 修复了 WinAppSDK 安装程序 .exe,使其具有正确的资源版本信息。

版本 1.4.1 (1.4.230913002)

这是 Windows 应用 SDK 的服务版本,其中包含 1.4 版本的严重 bug 修复。

  • 修复了提高第一帧时间的性能问题。
  • 修复了菜单不顾及 RequestedTheme 的问题。 例如,此问题可能导致白色背景上的白色文本。 有关详细信息,请参阅 GitHub 问题 #8756
  • 修复了导致亚克力背景有时在某些菜单中完全透明的问题。
  • 修复了 XAML 有时导致 Windows 不必要地重新画桌面壁纸的问题。
  • 修复了对 ListViewGridViewTabNavigation = LocalTabNavigation = Cycle 的支持,现在除了箭头键外,还可以使用 TAB 在标头和项之间导航。
  • 修复了关闭工具提示时出现的一些干扰异常。 有关详细信息,请参阅 GitHub 问题 #8699

版本 1.4

以下部分描述了版本 1.4 的新功能和已更新功能,以及已知问题。

在现有的 Windows 应用 SDK 1.3 应用中,可以将 Nuget 包更新为 1.4.230822000(请参阅使用 NuGet 包管理器在 Visual Studio 中安装和管理包中的更新包部分)。

有关已更新的运行时和 MSIX,请参阅 Windows 应用 SDK 下载

自定义标题栏 + AppWindow 标题栏合并

WinUI 3 自定义标题栏使用 AppWindow 标题栏实现,以及 Windows 应用 SDK 1.4 中的 NonClientInputPointerSource API。 因此,这两个标题栏现在实现的行为方式都与相同的功能和限制相同。 在所有受支持的情况下,这完全向后兼容 - 任何具有自定义标题栏的应用都将像以前一样运行。 但是,对于可能不熟悉自定义标题栏的 WinUI 3 开发人员来说,现在利用这些新功能来了解和使用它们变得更加容易:

  • 更好的默认方案,开发人员不专门定义标题栏元素(替换 WinUI 2 中的回退标题栏)
  • 标题栏中的不同拖动区域,使你能够创建多个拖动区域,并将可单击控件放置在非工作区区域的任何部分(标题栏区域)
  • 应用范围的可拖动区域,可放置在应用中的任意位置或使整个应用可拖动
  • 更好的主题支持,用于替换基于资源的主题
    • 由于拖动区域是透明的,因此每次都遵循应用主题
  • 更多自定义:隐藏最小值、最大值和关闭按钮;将系统图标置于标题栏中;或具有不同的区域充当接收 NCHITTEST 响应的描述文字按钮
  • 更多开发人员自由度,使你能够混合和匹配 AppWindow 标题栏 API,例如,对大多数方案使用更高级别的 WinUI 3 API,但将 AppWindow API 混合在较低级别的控制中

小组件更新

已为小组件提供程序添加了三个新接口来实现:IWidgetProvider2IWidgetProviderAnalyticsIWidgetProviderErrorsIWidgetProvider2 允许提供程序响应用户调用的自定义操作,这与第一方小组件可用的操作相同。 提供程序使用 IWidgetProviderAnalyticsIWidgetProviderErrors 接口收集其小组件的遥测数据;有关小组件的分析和故障事件将传达给相应的小组件提供程序。 WidgetCustomizationRequestedArgsWidgetAnalyticsInfoReportedArgsWidgetErrorInfoReportedArgs 类用于传达相关信息以支持新功能。

XAML 岛不再为试验性

XAML 岛和基础 ContentIslands 平台不再具有实验性。

  • 目前,XAML 岛仅在 C++ 应用中进行测试以供使用。 此版本不包含任何用于 WPF 或 WinForms 的方便的包装元素。
  • DesktopWindowXamlSource 和相关类型已添加到 XAML 岛的 Microsoft.UI.Xaml.Hosting 命名空间中。 添加了 XamlRoot.ContentIslandEnvironment 以帮助访问元素的基础岛信息。
  • Microsoft.UI.Content 命名空间和 Microsoft.UI.Input 命名空间中引入了许多新类型,作为对 XAML 岛的基础支持,或者使用此 ContentIslands 功能而不使用 XAML。
  • 已为岛方案在 Microsoft.UI.Input.DragDrop 命名空间中添加了新的 DragDropManager(加上相关类型)。

ItemsView

我们引入了一个名为 ItemsView 的新列表控件和相应的具体 ItemContainer 类。 ItemContainer 是一个具有内置选择状态和视觉对象的轻型容器,可以轻松包装所需内容,并可用于集合控件方案的 ItemsView

  • ItemsView 控件显示数据收集。 ItemsView 类似于 ListViewGridView 控件,但使用 ItemsRepeaterScrollViewItemContainerItemCollectionTransitionProvider 组件生成。 它提供插入自定义 LayoutItemCollectionTransitionProvider 实现的独特功能。 另一个关键优势是能够在保留项目选择的同时动态切换布局。 内部 ScrollView 控件还提供在控件 ListView/GridViewScrollViewer 的控件中不可用的功能,例如在编程滚动期间控制动画的功能。
    • 使用 ItemsRepeater 的新 ItemTransitionProvider 属性(以及新的 ItemsView 控件),可以指定一个 ItemCollectionTransitionProvider 对象来控制该控件上的过渡动画。 CreateDefaultItemTransitionProvider 方法也已添加到 Layout,这样,如果 ItemsView 控件上未显式提供回退转换,布局对象将提供回退转换。
    • Layout 上新的 IndexBasedLayoutOrientation 属性,其中布局方向(如果有)项基于源集合中的索引。 默认值为 IndexBasedLayoutOrientation.None。 自定义布局通过调用新的(受保护的) SetIndexBasedLayoutOrientation 方法来设置此属性。
    • VirtualizingLayoutContext 上的新 VisibleRect 属性获取与 Layout 关联的 FrameworkElement 内的可见视区矩形。 可以重写受保护的虚拟 VirtualizingLayoutContext.VisibleRectCore 方法,以提供将从属性返回 VisibleRect 的值。
  • LinedFlowLayout 类通常用于布局集合控件的 ItemsView 项。 它特别适用于显示图片集合。 它通过将它们从左到右、从上到下布局,以相等的高度行来执行此操作。 图片填充水平线,然后换行到下一行。 图片可能裁剪左侧和右侧边缘,以适应一行。 在采用拉伸模式时,它们还可以水平展开,并裁剪顶部和下边缘以填充线条。

WinAppSDK 中的新功能

  • 允许 Win32 WinRT 应用检测系统高对比度设置何时更改的新 ThemeSettings 类,类似于 UWP 的 AccessibilitySettings 类。 有关详细信息,请参阅 GitHub 上的 ThemeSettings API 规范
  • AccessKeyManager.EnterDisplayMode 是一种显示所提供根的当前重点元素的访问键的新方法。 当显示调用命令的键提示时,访问键处于“显示模式”,例如按“画图”中的 Alt 键以显示哪些键与哪些控件对应。 此方法允许以编程方式进入显示模式。
  • Application.ResourceManagerRequested 提供了一种机制,用于为默认 IResourceManager 不起作用的方案提供不同的 ResourceManager 来解析资源 URI。 有关详细信息,请参阅 GitHub 上的 Application.ResourceManagerRequested API 规范
  • WebView2 SDK 的版本从 1661.34 更新为 1823.32
  • 现在支持 Popup/FlyoutBase.IsConstrainedToRootBounds = false,允许弹出窗口/浮出控件扩展到父窗口边界之外。 SystemBackdrop 属性已添加到这些类型,以支持在这些不受约束的弹出窗口中具有亚克力。 默认情况下,菜单使用此控件来具有亚克力。
  • ClosedFrameworkClosedIsClosed 已添加到 DesktopAcrylicControllerMicaController,以改进对象/线程关闭期间的处理。
  • 现在可以将 DesktopAcrylicController.Kind 设置为在一些标准亚克力外观之间进行选择。
  • DispatcherQueue 具有一些新事件和帮助程序,以便更好地组织关闭和使用岛的应用轻松运行标准支持的事件循环。
  • Microsoft.UI.Input 命名空间中的 InputNonClientPointerSource 可用于自定义标题栏方案来定义非工作区区域。 代码可以注册相应的事件,例如悬停在这些区域中单击事件。
  • AppWindow 有一些新的帮助程序来获取和关联 DispatcherQueue
  • TreeView.SelectionChanged 事件允许开发人员在用户或代码隐藏更改控件中的 TreeView 选定节点集时做出响应。
  • ScrollView 控件提供了 ScrollViewer 的新替代方法。 此新控件在行为和 API 中与现有 ScrollViewer 控件高度一致,但基于 InteractionTracker,具有动画驱动视图更改等新功能,还旨在确保完整的 ItemsRepeater 功能。 有关更多详细信息,请参阅更灵活的 ScrollViewer · 问题 #108 · microsoft/microsoft-ui-xaml (github.com)。 各种新类型(包括 ScrollPresenter)是整体 ScrollView 模型的一部分。
  • AnnotatedScrollBar 控件通过提供一种简单的方法来浏览大型项集合,以扩展常规滚动条的功能。 这是通过可单击的滑轨实现的,标签充当标记。 它还允许在悬停在可单击的滑轨上时显示工具提示,从而更精细地了解可滚动内容。

已知问题

Bug 修复

  • 修复了调用 Microsoft.Windows.AppLifecycle.AppInstance.Restart("") API 导致解压缩的应用崩溃的问题。 有关详细信息,请参阅 GitHub 问题 #2792
  • 修复了 1.4-experimental1 中引入的安装程序崩溃问题。 有关详细信息,请参阅 GitHub 问题 #3760
  • 修复了 TextBlock 中未正确删除文本删除的问题。 有关详细信息,请参阅 GitHub 问题 #1093
  • 修复了导致面板中 TabFocusNavigation 设置为“一次”的 Shift + Tab 导航错误的问题。有关详细信息,请参阅 GitHub 问题 #1363
  • 修复了 C++/WinRT 中阻止 {x:Bind} 使用命名 XAML 控件的属性正常工作的问题。 有关详细信息,请参阅 GitHub 问题 #2721
  • 修复了 WinUI 桌面应用中由设置 DebugSettings.EnableFrameRateCounter = true 引起的运行时 AccessViolation 问题。 有关详细信息,请参阅 GitHub 问题 #2835
  • 修复了 XamlTypeInfo.g.cpp 不包含所需标头的问题。 有关详细信息,请参阅 GitHub 问题 #4907
  • 修复了同时多点触控和鼠标输入导致的崩溃问题。 有关详细信息,请参阅 GitHub 问题 #7622
  • 修复了当禁用鼠标悬停上非活动窗口的系统设置已生效时,阻止活动 WinUI 3 应用窗口滚动的问题。 有关详细信息,请参阅 GitHub 问题 #8764
  • 修复了尝试子类 MediaPlayerElement 时出现的崩溃。
  • 修复了 TreeView 中的一些崩溃和内存泄漏问题。
  • 修复了使用键盘在 RadioButtons 中导航时可能发生的应用挂起问题。
  • 修复了使用键盘在 PipsPager 中导航时的崩溃。
  • 修复了使用“设置”应用中的“文本大小”辅助功能设置缩放的 WebView2 内容。
  • 修复了在显示器关闭时动画运行时可能发生的崩溃。
  • 修复了 1.3 中引入的性能问题,该问题为第一个布局/呈现增加了约 10% 的开销。

版本 1.3

版本 1.3.3 (1.3.230724000)

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 1.3 的关键 bug 修复。

  • 修复了关闭对话框时鼠标有时会停止工作的问题。
  • 修复了由于系统上包版本不匹配而阻止应用安装的部署问题。 有关详细信息,请参阅 GitHub 问题 #3740
  • 修复了影响 Windows 应用 SDK 1.3 中的上下文菜单定位的问题。
  • 修复了导致某些 WinUI3 应用在某些情况下因 XAML 过早关闭而关闭应用时崩溃的问题。
  • 修复了字体图标在从右到左的语言中无法正确镜像的问题。 有关详细信息,请参阅 GitHub 问题 #7661
  • 修复了在资源按错误顺序被拆毁时导致应用在关闭时崩溃的问题。 有关详细信息,请参阅 GitHub 问题 #7924

版本 1.3.2 (1.3.230602002)

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 1.3 的关键 bug 修复。

  • 修复了设置受保护游标时出现的故障。
  • 修复了应用启动期间 XamlMetadataProvider 的性能问题。 有关详细信息,请参阅 GitHub 问题 #8281
  • 修复了 RichTextBlock 中超链接和触控的问题。 有关详细信息,请参阅 GitHub 问题 #6513
  • 修复了 WebView2 中滚动和触控板的问题。 有关详细信息,请参阅 GitHub 问题 #7772
  • 修复了 Windows 应用 SDK 的更新有时需要重启 Visual Studio 的问题。 有关详细信息,请参阅 GitHub 问题 #3554
  • 修复了在调试器中运行时,关闭时出现的干扰异常。

版本 1.3.1 (1.3.230502000)

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 1.3 的关键 bug 修复。

  • 修复了在内容为 null 的情况下设置 SystemBackdrop 时导致应用崩溃的问题。 有关详细信息,请参阅 GitHub 问题 #8416
  • 修复了在 XAML 中设置窗口标题(这是 1.3.0 中添加的新功能)时导致应用崩溃的问题。 有关详细信息,请参阅 GitHub 问题 #3689
  • 修复了窗口在其内容发生更改时错误地获取焦点的问题。
  • 修复了使用 WinAppSDK 1.3 项目模板创建 C++ 项目时出现的问题。
  • 更新了 Visual Studio Marketplace 上的模板

版本 1.3

以下部分描述了版本 1.3 的新功能和已更新功能,以及已知问题。

在现有的 Windows 应用 SDK 1.2 应用中,可以将 Nuget 包更新为 1.3.230331000(请参阅使用 NuGet 包管理器在 Visual Studio 中安装和管理包中的更新包部分)。

有关已更新的运行时和 MSIX,请参阅 Windows 应用 SDK 下载

XAML 背景 API

借助 XAML 窗口中的内置属性,现在可以更轻松地在 WinUI 3 应用中使用 Mica & Background Acrylic 背景。 有关 Xaml 背景属性的详细信息,请参阅系统背景Mica 背景 API 文档。

public MainWindow()
{
    this.InitializeComponent();

    this.SystemBackdrop = new MicaBackdrop();
}

Window.AppWindow

现在,只需替换几行样板代码,就可以直接通过 Window.AppWindow窗口使用 AppWindow API。

WinAppSDK 中的新功能

  • ApplicationModel.DynamicDependency:取代已弃用的 MddGetGenerationId 的 PackageDependency.PackageGraphRevisionId
  • 环境管理器:EnvironmentManager.AreChangesTracked 告知你是否可在应用程序中跟踪对环境管理器的更改。
  • 当无法解析引用的 Static/ThemeResource 查找时,现在会引发新事件 DebugSettings.XamlResourceReferenceFailed。 使用此事件可以访问某个跟踪,该跟踪详细说明了在框架中的哪个位置搜索该键,以便更好地调试 Static 和 ThemeResource 查找失败。 有关详细信息,请参阅 GitHub 上的跟踪 XAML 资源引用查找失败 API 规范。

其他更新

已知问题

由于最近对 xaml 编译器进行了更改,升级到版本 1.3 的现有项目可能会在 Visual Studio 中遇到如下所示的生成错误:

> C:\Users\user\\.nuget\packages\microsoft.windowsappsdk\\**1.3.230331000**\buildTransitive\Microsoft.UI.Xaml.Markup.Compiler.interop.targets(537,17): error MSB4064: The "PrecompiledHeaderFile" parameter is not supported by the "CompileXaml" task loaded from assembly: Microsoft.UI.Xaml.Markup.Compiler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=de31ebe4ad15742b from the path: C:\Users\user\\.nuget\packages\microsoft.windowsappsdk\\**1.2.230118.102**\tools\net472\Microsoft.UI.Xaml.Markup.Compiler.dll. Verify that the parameter exists on the task, the <UsingTask> points to the correct assembly, and it is a settable public instance property.

此错误的原因是 Visual Studio 使用版本 1.2 中缓存的 xaml 编译器任务 dll,但使用版本 1.3 中不兼容的 MSBuild 逻辑驱动该 dll,如上面的错误文本所示。 解决方法是关闭 Visual Studio,重启它,然后重新加载解决方案。

版本 1.2

版本 1.2.5 (1.2.230313.1)

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 1.2 的关键 bug 修复。

  • 修复了在组合功能关闭期间导致应用崩溃的问题。
  • 修复了即使在屏幕关闭的情况下,也会导致应用继续运行动画的问题。
  • 修复了当鼠标和键盘输入同时发生时,导致 WebView2 中鼠标和触摸输入失败的问题。 有关详细信息,请参阅 GitHub 问题 #3266

版本 1.2.4 (1.2.230217.4)

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 1.2 的关键 bug 修复。

  • 修复了导致独立应用无法配置 UAC 设置的问题。 有关详细信息,请参阅 GitHub 问题 #3376
  • 修复了导致推送通知通过 PushNotificationChannel::ExpirationTime 返回不准确过期时间的问题。 有关详细信息,请参阅 GitHub 问题 #3300
  • 修复了将双精度数作为参数传递给 x:Bind 函数时导致将负数视为“无效”的问题。
  • 用于更新 WinUI VSIX 的多个修复。 这些更新包括简化 app.manifest 中的项目模板 dipAwareness、删除 UWP 模板、更新本地化资源文件、添加电话 ID 以取消阻止 Store 提交,以及删除版权声明和许可证。 有关详细信息,请参阅 GitHub 问题 #5659#3205#3323#3322#3143

版本 1.2.3 (1.2.230118.102)

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 1.2 的关键 bug 修复。

  • 修复了关闭多个窗口时导致 WinUI 3 应用崩溃的问题。
  • 修复了在调用 ThreadPoolTimer 接口的两个或更多个引用时,导致应用在关闭时崩溃的问题。 有关详细信息,请参阅 GitHub 问题 #7260#7239
  • 修复了导致所有单项目 MSIX 应用以完全信任方式运行的问题。 有关详细信息,请参阅 GitHub 问题 #7766

版本 1.2.2 (1.2.221209.1)

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 1.2 的关键 bug 修复。

  • 修复了在已安装 Store 和旁加载包中的一个时,无法安装另一个(例从安装程序、NuGet 和引导程序安装)的问题。 有关详细信息,请参阅 GitHub 问题 #3168
  • 修复了在使用触摸板滚动时导致缺少弹性效果和动画曲线的问题。 有关详细信息,请参阅 GitHub 问题 #7874
  • 修复了 ListView 中导致内存泄漏的问题。
  • 修复了在鼠标悬停后导致 Button 模板不遵循 Foreground 属性的问题。 有关详细信息,请参阅 GitHub 问题 #7208
  • 修复了当 MediaElement 中没有 MediaPlaybackItem 时导致意外异常的问题。
  • 修复了在内容转换时导致 MediaPlayerElement 中出现白框的问题。
  • 修复了导致 App.UnhandledException 无法从其他线程捕获异常的其他问题。 有关详细信息,请参阅 GitHub 问题 #1259#5221

版本 1.2.1 (1.2.221116.1)

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 1.2 的关键 bug 修复。

修复了在添加 WebView2 或 TextBox 控件时,导致 C++ WinUI 3 应用在启动时崩溃的问题。 有关详细信息,请参阅 GitHub 问题 #7911#3117

版本 1.2

以下部分描述了版本 1.2 的新功能、已更新功能、限制和已知问题。

注意

Visual Studio 2019 和 .NET 5 不再支持生成 C# 应用(请参阅 Windows 应用 SDK 1.2 将迁移到 C# WinRT 2.0)。 需要 Visual Studio 2022 和以下 .NET SDK 版本之一:6.0.401(或更高版本)、6.0.304、6.0.109。 发布的 WinAppSDK 1.2 也将支持 .NET 7。

若要更新 .NET SDK 版本,请安装最新版本的 Visual Studio 2022 或访问 .NET 下载。 在没有所需 .NET SDK 版本的情况下更新 NuGet 包时,你会看到如下错误:“此 WindowsAppSDK 版本需要 .NET 6+ 和 WinRT.Runtime.dll 2.0 或更高版本。” 若要将项目从 .NET 5.0 更新到 .NET 6.0,请打开项目文件,然后将“TargetFramework”更改为 net6.0,并将“目标 OS 版本”更改为相应的值(例如 net6.0-windows10.0.19041.0)。

Windows 中的第三方小组件

小组件面板最初是在 Windows 11 中引入的,仅限于显示内置小组件。 小组件是在小组件面板上显示文本和图形的小型 UI 容器,与设备上安装的应用相关联。 使用 Windows 应用 SDK,第三方开发人员现在可为打包的 Win32 应用创建小组件,并在 Windows 11 小组件面板上本地测试这些小组件。

有关小组件的详细信息,请查看小组件概述

若要开始为应用开发小组件,请查看小组件服务提供商开发文档和小组件设计基础,以了解先决条件、指导和最佳做法。

此版本的先决条件包括:

  • 在开发计算机上启用开发人员模式。
  • 开发计算机正在运行 Windows Insider Preview (WIP) 开发频道中大于或等于 25217 的 Windows 版本,小组件面板为 521.20060.1205.0 或更高版本。

开发小组件时的已知限制

  • 只能在已在 WIP 中注册此预览版的设备上本地测试第三方小组件。
  • 只能为打包的 Win32 应用创建小组件。 渐进式 Web 应用 (PWA) 的小组件已计划作为 Microsoft Edge 108 的一部分提供支持。

DisplayInformation

Windows 桌面应用现在可以通过 WinAppSDK 中的 DisplayInformation 类支持高动态范围 (HDR) 和自动颜色管理 (ACM)。 使用 DisplayInformation 类可以监视应用程序视图的显示相关信息。 这包括一些事件,客户端可以通过这些事件监视应用程序视图中影响该视图所在的显示画面的更改,以及监视显示画面中可能影响应用程序视图的更改。

WinUI 3

WinUI 3 应用可以使用 MediaPlayerElementMediaTransportControls 媒体播放控件来播放音频和视频。 有关如何以及何时使用媒体控件的详细信息,请参阅媒体播放器

已使用 WinUI 2.8 中的最新控件、样式和行为更新了 WinUI 3。 这些更新包括添加了 InfoBadge 控件、改进了辅助功能和高对比度模式,以及控件的 bug 修复。 有关详细信息,请参阅 WinUI 2.7WinUI 2.8 的发行说明。

已修复的问题

已知的限制

  • 使用 Visual Studio 2022 17.4.0 创建新的 WinUI 3 项目时,将引用 WinAppSDK 预览版。 使用 NuGet 包管理器更新对此版本的引用。
  • 在未打包的应用中将 MediaPlayerElement.Source 设置为相对 URI (ms-appx/ms-resource) 失败。 建议的解决方法是将相对 ms-appx:/// URI 转换为完全解析的 file:/// URI。

修整使用 .NET 开发的应用

.NET 开发人员现在可以发布已修整的 WinAppSDK 应用。 使用 CsWinRT 2.0,分布在 WinAppSDK 中的 C#/WinRT 投影现在可修整。 发布已修整的应用可以通过从可修整的二进制文件中删除任何未使用的代码来减少应用的磁盘占用空间。 应用的启动性能也可能会得到提高。 在发布一个经过修整的简单 Hello World 应用后,我们发现磁盘占用空间减少了大约 80%,启动性能提高了大约 7%。 在使用 WinUI 库时,我们发现磁盘占用空间减少了大约 45%。

有关如何启用修整、修整限制(例如针对可修整类型的反射)和修整警告的更多详细信息,请参阅修整独立部署和可执行文件。 开发人员应在修整后全面测试其应用,以确保一切符合预期。 有关详细信息,请查看 GitHub 上的问题 2478

支持 Visual Studio Arm64

早在 Project Reunion(现为 WinAppSDK)0.5 时代,使用 WinAppSDK 开发的应用就可以在 Arm64 上运行。 从 Visual Studio 17.3 预览版 2 开始,可以在 Arm64 设备上使用 WinAppSDK 开发本机应用程序。

若要开始在 Arm64 设备上进行开发,请参阅基于 Arm 的 WindowsArm64 Visual Studio

通知

AppNotificationBuilder 作为 XML 有效负载的替代方案引入,用于创建和定义应用通知。

有关使用信息,请参阅 GitHub 上的 AppNotificationBuilder 规范

另请参阅快速入门:Windows 应用 SDK 中的应用通知,以获取有关如何创建发送和接收本地应用通知的 Windows 桌面应用程序的示例。

中断性变更

对于推送通知,在发出通道请求调用时,应用需要使用 Azure 对象 ID 而不是 Azure 应用 ID。 有关查找 Azure 对象 ID 的详细信息,请参阅快速入门:Windows 应用 SDK 中的推送通知

修复的问题

PushNotificationManager.IsSupported 将执行提升模式检查。 如果应用已提升,它将返回 false

已知限制(通知)

窗口化

现在,可以通过 AppWindowTitleBar 类在 Windows 10 版本 1809 及更高版本中使用完整的标题栏自定义。 可以将 AppWindowTitleBar.ExtendsContentIntoTitleBar 设置为 true 以将内容扩展到标题栏区域,并设置 SetDragRectangles 以定义拖动区域(此外还可以设置其他自定义选项)。

如果你一直在使用 AppWindowTitleBar.IsCustomizationSupported 属性来检查是否可以调用 AppWindowTitleBar API,它现在会在支持的 Windows 应用 SDK Windows 10 版本(1809 及更高版本)上返回 true

已知限制(窗口)

Windows 10 不支持基本标题栏自定义。 这些属性包括 BackgroundColorInactiveBackgroundColorForegroundColorInactiveForegroundColorIconShowOptions。 如果你调用这些属性,将以静默方式忽略它们。 所有其他 AppWindowTitleBar API 都可以在 Windows 10 版本 1809 及更高版本中使用。 对于标题按钮颜色 API(及其他 API)和 HeightExtendsContentIntoTitleBar 必须设置为 true,否则也会以静默方式将其忽略。

访问控制

引入了 security.accesscontrol.hGetSecurityDescriptorForAppContainerNames 函数,以简化和条理化打包进程与常规 Win32 API 之间的命名对象共享。 此方法采用包系列名称 (PFN) 和访问掩码的列表,并返回安全描述符。 有关详细信息,请参阅 GitHub 上的 GetSecurityDescriptorForAppContainerNames 规范

其他限制和已知问题

重要

在项目中引用 WinAppSDK 1.2 时,可能会看到如下所示的错误:“检测到将包 Microsoft.Windows.SDK.BuildTools 从 10.0.22621.1 降级到 10.0.22000.194”,此错误的原因是在应用项目和 WinAppSDK 包中对该包进行了不兼容的引用。 若要解决此问题,可以将项目中的引用更新为较新且兼容的 Microsoft.Windows.SDK.BuildTools 版本。

  • 单元测试可能失败,并在 Visual Studio 的测试输出窗格中显示 REGDB_E_CLASSNOTREG 错误。 作为解决方法,可以将 <WindowsAppContainer>true</WindowsAppContainer> 添加到项目文件中。
  • 不支持.NET PublishSingleFile。
  • 现在,仅为生成可执行文件(OutputType=Exe 或 WinExe) 的项目设置引导程序和未停靠 RegFree WinRT 自动初始化表达式默认值。 这可以防止在默认情况下将自动初始化表达式添加到类库 DLL 和其他不可执行文件中。
    • 如果需要在不可执行文件(例如,由不初始化引导程序的通用可执行文件加载的测试 DLL)中使用自动初始化表达式,可以通过 <WindowsAppSdkBootstrapInitialize>true</WindowsAppSdkBootstrapInitialize><WindowsAppSdkUndockedRegFreeWinRTInitialize>true</WindowsAppSdkUndockedRegFreeWinRTInitialize> 在项目中显式启用自动初始化表达式。
  • Microsoft.WindowsAppRuntime.Release.Net.dll 始终是 Arm64 二进制文件,不适用于 x86 和 x64 应用。 显式调用 Bootstrap API 时,不要使用 Microsoft.WindowsAppRuntime.Release.Net.dll 程序集。 作为解决方法,可以在随 NuGet 包一起分发的以下源文件中包含版本常数:'..\include\WindowsAppSDK-VersionInfo.cs',或使用自动初始化表达式。

版本 1.1

Windows 应用 SDK 稳定渠道的 1.1.x 世系的最新可用版本为版本 1.1.5。 1.1.x 支持所有稳定渠道功能(请参阅 Windows 应用 SDK 发布渠道中的发布渠道提供的功能部分)。

版本 1.1.5

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 1.1 的关键 bug 修复。

Bug 修复

  • 修复了在启用 Mica 时 Acrylic 不起作用的问题。 有关详细信息,请参阅 GitHub 上的问题 7200
  • 修复了导致依赖于 WindowsAppRuntime 安装程序的应用(例如未打包的应用)无法在 Windows 10 ARM64 计算机上运行的问题。 有关详细信息,请参阅 GitHub 上的问题 2564

版本 1.1.4

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 1.1 的关键 bug 修复。

Bug 修复

  • 修复了从 1.0.x 回归,导致 ListView、TreeView 和其他“列表”控件在滚动多个项时崩溃的问题。 有关详细信息,请参阅 GitHub 上的问题 7230
  • 修复了 DispatcherQueue 导致排队的回调不再被调用的问题。
  • 修复了在同一应用会话中多次调用 DeploymentManager.Initialize 时导致应用崩溃的问题。
  • 修复了导致 C# 应用无法在 Arm64 Visual Studio 中生成的问题。 有关详细信息,请参阅 GitHub 上的问题 7140
  • 修复了由于错误的故障处理而导致 XAML 映像代码间歇性崩溃的问题。
  • 修复了在带有父 UserControl 的 ItemsRepeater 中附加事件处理程序时发生内存泄漏的问题。 有关详细信息,请参阅 GitHub 上的问题 6123
  • 修复了当应用项目配置为在旁加载其包(即 .appinstaller)时启用自动包更新的情况下导致 Visual Studio 17.3 中出现生成失败的问题。 有关详细信息,请参阅问题 2773
  • 修复了导致调用 Initialize(例如,对于推送,必须调用该方法)的 Store 分布式打包应用以冗余方式调用该方法的问题,因为 DeploymentManager::GetStatus 在已安装主包和单一实例包时返回 Package Install Needed。 这导致应用启动时性能下降。
  • 修复了在无法打开清理事件的情况下有意忽略该事件时,导致单实例应用发生异常的问题。 有关详细信息,请参阅 GitHub 上的 PR

版本 1.1.3

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 1.1 的关键 bug 修复。

Bug 修复

  • 修复了当应用的第一页中包含 ProgressBar、ProgressRing、PipsPager、PersonPicture 或 Expander 控件时 XAML 崩溃的一系列相关问题。 有关详细信息,请参阅 GitHub 上的问题 7164
  • 修复了导致 x64 安装程序无法安装 Windows 应用 SDK 运行时的问题。 有关详细信息,请参阅 GitHub 上的问题 2713
  • 修复了在已安装更高版本的运行时时导致 WindowsAppRuntime 安装失败的问题。 有关详细信息,请参阅 GitHub 上的问题讨论 2708

版本 1.1.2

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 1.1 的关键 bug 修复。

Bug 修复

  • 修复了在对话框处于打开状态的情况下关闭窗口时 XAML 崩溃的问题。 有关详细信息,请参阅 GitHub 上的问题 1032
  • 在 C# 文件中添加 <auto-generated> 标记以防止出现 StyleCop 警告。 有关详细信息,请参阅 GitHub 上的问题 4526
  • 修复了在未安装匹配的框架包的情况下调用 MddBootstrapInitialize 时导致访问冲突错误和崩溃的问题。 有关详细信息,请参阅 GitHub 上的问题 2592
  • 修复了 Visual Studio 中缺少 C# WinUI 3 项模板的问题。 有关详细信息,请参阅 GitHub 上的问题 7148
  • 修复了 WindowsAppRuntime 安装程序在以 System 用户身份运行时失败的问题。 有关详细信息,请参阅 GitHub 上的问题 2546

版本 1.1.1

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 1.1 的关键 bug 修复。

Bug 修复

  • 修复了在拖放操作期间导致应用有时崩溃的问题。 有关详细信息,请参阅 GitHub 上的问题 7002
  • 修复了在将 AppWindowPresenterKind 从 FullScreen 切换为 Default 时导致标题栏消失的问题。
  • 修复了 ApiInformation.IsPropertyPresentApiInformation.IsMethodPresent 等引导程序 API 在未打包的应用中导致未经处理的异常的问题。 有关详细信息,请参阅 GitHub 上的问题 2382
  • 修复了使用笔输入最大化应用程序时导致应用冻结的问题。

版本 1.1

以下部分描述了版本 1.1 的新功能、已更新功能、限制和已知问题。

注意

C# 开发人员需要使用以下 .NET SDK 版本之一(或更高版本):6.0.202、6.0.104、5.0.407、5.0.213。 若要更新 .NET SDK 版本,请访问 .NET 下载或更新到最新版本的 Visual Studio。 在没有所需 .NET SDK 版本的情况下更新 NuGet 包时,你会看到如下错误:“此 WindowsAppSDK 版本需要 WinRT.Runtime.dll 版本 1.6 或更高版本。”

应用生命周期和重启

应用现在可以使用特定的参数启动显式重启,并指明基于现有的 RegisterApplicationRestart API 生成以在 OS 中注册,从而在更新、挂起和重新引导的情况下重启。

新功能:

  • 任何打包或未打包的桌面应用都可以根据命令自行终止和重启,并可以使用 AppInstance.Restart() API 访问已重启实例的任意命令行字符串。
    • 这是 UWP RequestRestartAsync() API 的提升且同步版本,它支持使用参数重启,并在重启失败时返回 AppRestartFailureReason
    • 有关用法和参考信息,请查看 GitHub 上的重启 API 文档。

WinUI 3

WinUI 3 是一种适用于 Windows 应用 SDK 的本机用户体验 (UX) 框架。 此版本包含 WinAppSDK 1.0 中的新功能,以及 1.0 和 1.1 预览版中的多项稳定性改进。

新功能:

修复的 bug:

  • 修复了在使用 Mica 时,当一个窗口被两个屏幕均匀拆分的情况下应用崩溃的问题。 有关详细信息,请参阅 GitHub 上的问题 7079
  • 修复了在未通过将 WebView2 SDK 从 1020.46 升级到 1185.39 安装 C/C++ Runtime (CRT) 时,导致包含 WebView2 的 C# 应用在启动时崩溃的问题。
  • 修复了导致某些圆角在应为纯色时显示渐变色的问题。 有关详细信息,请参阅 GitHub 上的问题 6076问题 6194
  • 修复了 generic.xaml 中缺少已更新样式的问题。
  • 修复了在滚动到 ListView 末尾时导致应用崩溃的布局循环问题。 有关详细信息,请参阅 GitHub 上的问题 6218
  • 修复了启用拖放时用户无法放下元素的问题。 有关详细信息,请参阅 GitHub 上的问题 7008

已知限制:

  • 使用自定义标题栏时,标题控件不会在主题更改时更改颜色。
  • 当用户在对话框处于打开状态的情况下关闭窗口时,XAML 会崩溃。

部署

新功能:

已知限制:

  • 运行 Windows App Runtime 安装程序 (WindowsAppRuntimeInstall.exe) 需要启用旁加载。 有关详细信息,请参阅 GitHub 上的问题 2469
  • 在某些情况下,通过 Visual Studio“项目”菜单创建 MSIX 包可能会导致 Visual Studio 崩溃。 我们将在 Visual Studio 版本 17.3 预览版 2 中修复此问题,并为版本 17.2 提供修复方法。 如果你遇到此问题,可以通过从命令行生成 MSIX、切换到未打包的项目或还原到 Windows 应用 SDK 1.0 来解决此问题。
  • 版本 1809 不支持使用 MSIX 打包的独立应用程序,此操作会导致应用在启动时崩溃。

Elevation

应用现在能够以提升的特权运行。

已知限制:

环境变量管理器

环境变量管理器是 Windows 应用 SDK 1.1 中引入的新 API。 开发人员可以使用环境变量管理器从一个 API 外围应用访问和修改进程、用户和计算机范围内的环境变量。

如果从打包的应用程序中使用环境变量管理器,则会记录所有环境变量操作。 删除包后,将还原所有环境变量操作。

新功能:

  • 获取和设置进程、用户和计算机范围内的环境变量。
  • 删除使用环境变量管理器的包时会自动还原环境变量。
  • 包含用于 PATH 和 PATHEXT 的特定 API。

已知限制:

  • 仅适用于 Windows 11

MRT 核心

MRT 核心是新式 Windows 资源管理系统的简化版本,作为 Windows 应用 SDK 的一部分分发。

已解决的问题:

  • 在 .NET SDK 6.0.300 中,修复了在使用 VS UI 添加资源文件时导致资源默认不会编制索引的问题。 如果使用较旧的 .NET SDK 版本,请继续使用版本 1.0 发行说明中所述的解决方法。 有关详细信息,请参阅 GitHub 上的问题 1786
  • 在 Visual Studio 2022 17.2 中,修复了导致无法在未打包的 C++ WinUI 3 应用中正确生成资源 URI 的问题。 如果使用较旧的 Visual Studio 版本,请将 Visual Studio 更新到 17.2 以接收此修复。

已知限制:

  • 在 .NET 项目中,如果已生成应用,则复制粘贴到项目文件夹中的资源文件不会在 F5 上编制索引。 解决方法是重新生成应用。 有关详细信息,请参阅 GitHub 上的问题 1503

有关详细信息,请参阅使用 MRT Core 管理资源

通知

打包(包括使用外部位置打包)应用和未打包应用的开发人员现在可以发送 Windows 通知。

新功能:

  • 支持打包应用和未打包应用的应用通知。
    • 开发人员可以在本地或从他们自己的云服务发送应用通知,也称为 toast 通知。 请参阅应用通知概述
  • 支持打包应用和未打包应用的推送通知。
    • 开发人员可以从他们自己的云服务发送原始通知和应用通知。 请参阅推送通知概述

已知限制:

  • 不支持从提升的应用发送通知。 PushNotificationManager::IsSupported() 不会执行提升模式检查。

窗口化

为了更轻松地以编程方式访问 USER32.dll 中实现的功能(请参阅窗口和消息),此版本在自身的 AppWindow 中更多地展现了该功能。

新功能:

  • 具有现有窗口的应用可以通过调用 AppWindow.ShowOnceWithRequestedStartupState(等效于 ShowWindow(SW_SHOWDEFAULT))更好地控制窗口的显示方式。
  • 应用可以显示、最小化或还原窗口,同时指定在发出调用时是否应激活该窗口。
  • 应用现在可以在 Win32 坐标中确定其窗口工作区的具体尺寸,而无需计算非工作区大小来获取具体的工作区大小。
  • 其他 WinRT API 可用于支持基于 SetWindowPos 的 hWndInsertAfter 功能的窗口的 z 顺序管理。
  • 使用 AppWindowTitleBar.ExtendsContentIntoTitleBar 绘制自定义标题栏的应用可以设置 PreferredTitleBarHeight 选项。 现在可以选择标准高度的标题栏或高标题栏,后者为交互式内容提供更多空间。 有关何时使用高标题栏的建议,请参阅 Fluent 设计指南中的标题栏

已解决的问题:

  • 首次调用全屏呈现器时,窗口现在可以正常显示在整个屏幕上。 有关详细信息,请参阅 GitHub 上的问题 1853
  • 使用 AppWindow::GetFromWindowId 创建的窗口将 OverlappedPresenter 用作默认呈现器,但在对其他 API 中的窗口样式更改方面没有限制。 使用 AppWindow::Create 创建的窗口从一开始就有默认的呈现器条件限制。 有关详细信息,请参阅 GitHub 上的问题 2049
  • 使用 OverlappedPresenter.SetBorderAndTitlebar API 隐藏标题按钮和边框会在最大化时生成 1 像素的上边框。 此问题已解决。 有关详细信息,请参阅 GitHub 上的问题 1693

已知限制:

  • 使用 AppWindowTitlebar API 自定义标准标题栏的颜色时,图标和文本不会与标准标题栏正确对齐。 有关详细信息,请参阅 GitHub 问题 2459

  • 在解决 GitHub 问题 2049(参阅上文)时,我们造成了以下 bug:如果将任何 AppWindowPresenter 应用于从 GetFromWindowId 检索到的 AppWindow,再通过调用 USER32 API 更改该呈现器正在跟踪的窗口样式,然后尝试通过重新应用默认呈现器还原到窗口的先前状态,则结果是一个没有标题栏的窗口。 如果你依赖应用中的任何呈现器,并在应用非默认呈现器时使用 USER32 调用来更改窗口样式,则可能需要添加一种解决方法来确保正确的窗口行为,直到此 bug 得到修复。 可以使用以下代码片段作为模板来解决此问题:

    AppWindow m_appWindow;
    OverlappedPresenter m_defaultPresenter;
    
    private void EnterFullScreen_Click(object sender, RoutedEventArgs e)
    {
        // Capture the default presenter.
        m_defaultPresenter = m_appWindow.Presenter as OverlappedPresenter;
    
        // Opt in the default overlapped presenter so it can control various aspects of the AppWindow.
        m_defaultPresenter.IsAlwaysOnTop = m_defaultPresenter.IsAlwaysOnTop;
        m_defaultPresenter.IsResizable = m_defaultPresenter.IsResizable;
        m_defaultPresenter.IsMinimizable = m_defaultPresenter.IsMinimizable;
        m_defaultPresenter.IsMaximizable = m_defaultPresenter.IsMaximizable;
        m_defaultPresenter.SetBorderAndTitleBar(m_defaultPresenter.HasBorder, m_defaultPresenter.HasTitleBar);
    
        m_appWindow.SetPresenter(AppWindowPresenterKind.FullScreen);
    }
    
    private void ExitFullScreen_Click(object sender, RoutedEventArgs e)
    {
        m_appWindow.SetPresenter(AppWindowPresenterKind.Default);
    }
    

C#/WinRT

现在支持 C# Windows 运行时组件,包括 WinUI 自定义控件。 这样,组件创作者便可将以 C# 创作的运行时组件分发到任何 WinRT 兼容的语言(例如,C++/WinRT)。 有关入门信息,请参阅演练 - 使用 WinUI 3 控件创建 C# 组件,并从使用 Windows 应用 SDK 的 C++/WinRT 应用使用该组件GitHub 上的示例

其他限制和已知问题

  • 引用依赖于 WebView2 的包(例如 Microsoft.Identity.Client)的应用无法生成。 此问题是因生成时二进制文件冲突而造成的。 有关详细信息,请参阅 GitHub 上的问题 2492
  • dotnet build 用于 WinAppSDK C# 类库项目可能会出现生成错误“无法加载 Microsoft.Build.Packaging.Pri.Tasks.ExpandPriContent 任务”。 若要解决此问题,请在项目文件中设置 <EnableMsixTooling>true</EnableMsixTooling>
  • 默认的 WinAppSDK 模板指出 MaxVersionTested="10.0.19041.0",但它应该是 "10.0.22000.0"。 若要完全支持某些功能,特别是 UnlockedDEHs,请将项目文件中的 MaxVersionTested 更新为 "10.0.22000.0"。

版本 1.0

Windows 应用 SDK 稳定渠道的 1.0.x 世系的最新可用版本为版本 1.0.4。 1.0.x 支持所有稳定渠道功能(请参阅 Windows 应用 SDK 发布渠道中的发布渠道提供的功能部分)。

版本 1.0.4

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 1.0 的关键 bug 修复。

Bug 修复

  • 修复了导致用作 Page.TopAppBar 或 Page.BottomAppBar 的 AppBars 不在屏幕上呈现的问题。
  • 修复了包名称不超过 12 个字符的、使用 MUXControls.dll 中的 WinUI 控件的应用立即崩溃的问题。 有关详细信息,请参阅 GitHub 上的问题 6360
  • 修复了导致键盘快捷方式和其他方案出现问题的触摸输入问题。 有关详细信息,请参阅 GitHub 上的问题 6291
  • 修复了导致使用 MSIX 打包的应用或作为独立应用部署的应用无法部署的问题。
  • 修复了在拖放操作期间导致应用有时崩溃的问题。 有关详细信息,请参阅 GitHub 上的问题 7002

版本 1.0.3

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 1.0 的关键 bug 修复。

Bug 修复

  • 修复了在未安装 C/C++ Runtime (CRT) 的情况下导致带有 WebView2 的 C# 应用在启动时崩溃的问题。
  • 修复了导致键盘快捷方式和其他方案出现问题的触摸输入问题。 有关详细信息,请参阅 GitHub 上的问题 6291

注意:我们通常不会在服务版本中添加功能,但此版本的 WebView2 修复要求我们更新到最新版本的 WebView2 SDK(1020.46 到 1185.39)。 有关 WebView2 1.0.1185.39 的更多信息,请参阅 WebView2 SDK 发行说明;有关 WebView2 Runtime 的详细信息,请参阅分发应用和 WebView2 Runtime

版本 1.0.2

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 1.0 的关键 bug 修复。

Bug 修复

  • 修复了在滚动到 ListView 末尾时导致应用崩溃的布局循环问题。 有关详细信息,请参阅 GitHub 上的问题 6218
  • 修复了在未安装 C/C++ Runtime (CRT) 的情况下导致 C# 应用在启动时崩溃的问题。 但是,使用 WebView2 的 C# 应用仍然需要 CRT。 有关详细信息,请参阅 GitHub 上的问题 2117
  • 修复了使用单项目 MSIX 的应用程序不生成 .appinstaller 文件的问题。 有关详细信息,请参阅 GitHub 上的问题 1821
  • 修复了 WinUI 应用程序不支持 .NET 6 dotnet build 的问题。

版本 1.0.1

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 1.0 的关键 bug 修复和多窗口支持。

Bug 修复

  • 修复了导致 MddBootstrapAutoinitializer 无法使用已启用的 ImplicitUsings 进行编译的问题。 有关详细信息,请参阅 GitHub 上的问题 1686
  • 修复了 WebView2 中的焦点意外丢失,导致输入和选择问题的问题。 有关详细信息,请参阅 GitHub 上的问题 5615问题 5570
  • 修复了在 WinUI 3 应用中使用自定义标题栏时,导致 Visual Studio 中的应用内工具栏不可单击的问题。
  • 修复了在 WinUI 3 应用中使用自定义标题栏时,导致不显示贴靠布局的问题。 有关详细信息,请参阅 GitHub 上的问题 6333问题 6246
  • 修复了在使用仍处于加载状态的 UIElement 调用 Window.SetTitlebar 的情况下,导致设置 Window.ExtendsContentIntoTitleBar 属性时发生异常的问题。
  • 修复了单项目 MSIX 应用不支持 dotnet build 的问题。
  • 修复了在安装打包的应用后导致无法安装未打包的应用的问题。 有关详细信息,请参阅 GitHub 上的问题 1871
  • 修复了鼠标拖动操作期间性能下降的问题。
  • 修复了在未打包的应用中调用 GetWindowIdFromWindow() 时崩溃的问题。 有关详细信息,请参阅 GitHub 上的问题讨论 1891

版本 1.0 的限制和已知问题也适用于版本 1.0.1。

此外,对于带有自定义标题栏的应用,我们在此版本中进行了更改(并解决了大量问题),其中包括对用于拖放操作的透明窗口的修复。 建议使用默认值和默认行为(试一试!)。 如果标题栏使用边距以使默认标题按钮可交互,我们建议通过将标题栏的背景设置为红色来可视化拖动区域,然后调整边距以将拖动区域延伸到标题控件。

新增功能

我们已稳定化并已启用在 WinUI 3 应用程序中的同一线程上创建多个窗口的功能。 有关详细信息,请参阅问题 5918

版本 1.0

以下部分描述了版本 1.0 的新功能、已更新功能、限制和已知问题。

WinUI 3

WinUI 3 是一种适用于 Windows 应用 SDK 的本机用户体验 (UX) 框架。 在此版本中,我们添加了多种来自 Windows 应用 SDK 0.8 的新功能,并稳定了 1.0 预览版中的问题。

新功能和更新

  • 我们添加了新控件(PipsPager、Expander、BreadcrumbBar)并更新了现有控件,以反映 WinUI 2.6 中的最新 Windows 样式。
  • 通过使用“打包的空白应用...”创建新应用程序,WinUI 中支持单项目 MSIX 打包 模板。
  • 我们现在支持在 Windows 1809 及更高版本上部署未打包的 WinUI 3 应用。 有关更多信息,请查看创建第一个 WinUI 3 项目
  • WinUI 3 项目现在可以将其目标版本向下设置为 Windows 10 版本 1809。 以前,它们只能设置为低至版本 1903。
  • Visual Studio 2022 预览版 5 和 GA 中支持适用于 WinUI 打包应用的应用内工具栏、热重载和实时可视化树。

重要限制

  • 打包和未打包 WinUI 应用程序的已知问题:

    • 引用 C++ Windows 运行时组件的 C++ 或 C# 应用中的运行时错误:
      • 若要解决此问题,请将以下目标添加到 Windows 运行时组件的 .vcxproj 文件的末尾:

        <Target Name="GetPriIndexName">
        <PropertyGroup>
            <!-- Winmd library targets use the default root namespace of the project for the App package name -->
            <PriIndexName Condition="'$(RootNamespace)' != ''">$(RootNamespace)</PriIndexName>
            <!-- If RootNamespace is empty fall back to TargetName -->
            <PriIndexName Condition="$(PriIndexName) == ''">$(TargetName)</PriIndexName>
        </PropertyGroup>
        </Target>
        
      • 预期错误类似于 WinRT 来源错误 - 0x80004005:“无法在‘ms-appx:///BlankPage.xaml’中找到资源。”

  • 使用单项目 MSIX 的 WinUI 应用程序(“打包的空白应用”模板)的已知问题:

    • 缺少包以及直到重新启动 Visual Studio 才出现“发布”菜单项:当使用“打包的空白应用(桌面版 WinUI 3)”项目模板在 Visual Studio 2019 和 Visual Studio 2022 中创建具有单项目 MSIX 的新应用时,关闭并重新打开 Visual Studio 之前,将不会在菜单中显示用于发布项目的命令。
    • 在未安装“C++ (v14x)通用 Windows 平台工具”可选组件的情况下,不会编译具有单项目 MSIX 的 C# 应用。 有关更多信息,请参阅安装 Windows 应用 SDK 工具
    • 使用在引用的 Windows 运行时中定义的类型并具有单项目 MSIX 的应用中可能出现运行时错误:若要解决此问题,请手动将可激活的类条目添加到 appxmanifest.xml。
      • C# 应用程序中的预期错误是“COMException: 类没有注册(0x80040154 (REGDB_E_CLASSNOTREG))”。
      • C++/WinRT 应用程序中的预期错误为“winrt::hresult_class_not_registered”。
  • 未打包的 WinUI 3 应用(未打包的应用)的已知问题:

  • 打包和部署 WinUI 应用程序时的已知问题:

    • 具有单项目 MSIX(“打包的空白应用”模板)的 WinUI 应用中不支持 Package 命令。 改为使用 Package & Publish 命令创建 MSIX 包。
    • 若要使用 Pack 命令从 C# 类库创建 NuGet 包,请确保活动 ConfigurationRelease
    • C++ Windows 运行时组件中不支持 Pack 命令以创建 NuGet 包。

有关详细信息,或开始使用 WinUI 进行开发,请参阅:

窗口化

Windows 应用 SDK 提供了一个 AppWindow 类,该类改进了以前发布的易于使用的 Windows.UI.WindowManagement.AppWindow 预览版类,使其可用于所有 Windows 应用(包括 Win32、 WPF 和 WinForms)。

新功能

  • AppWindow 是一个高级开窗 API,可以实现易于使用的、与 Windows 用户体验和其他应用顺利集成的开窗方案。 表示应用内容的系统托管容器的高级抽象。 这是用于托管你的内容的容器,当用户在屏幕上调整应用的大小和移动应用时,此容器代表了用户交互的实体。 熟悉 Win32 的开发人员可将 AppWindow 视为 HWND 的高级抽象。
  • DisplayArea 表示 HMONITOR 的高级抽象,遵循与 AppWindow 相同的原则。
  • DisplayAreaWatcher 使开发人员可以观察显示拓扑中的更改,并枚举系统中当前定义的 DisplayAreas。

有关详细信息,请参阅管理应用窗口

输入

这些是支持 WinUI 的输入 API,可为开发人员提供更低级别的 API 图面以实现更高级的输入交互。

新功能

重要限制

  • 已删除所有 PointerPoint静态工厂函数:GetCurrentPointGetCurrentPointTransformedGetIntermediatePointsGetIntermediatePointsTransformed
  • Windows 应用 SDK 不支持检索具有指针 ID 的 PointerPoint 对象。 相反,可以使用 PointerPoint 成员函数 GetTransformedPoint,检索现有 PointerPoint 对象的转换版本。 对于中间点,可以使用 PointerEventArgs 成员函数 GetIntermediatePointsGetTransformedIntermediatePoints
  • 直接使用平台 SDK API Windows.UI.Core.CoreDragOperation 不适用于 WinUI 应用程序。
  • 删除了 PointerPoint 属性的 RawPositionContactRectRaw,因为它们引用了非预测值,这与操作系统中的常规值相同。 请改为使用 PositionContactRect。 指针预测现在通过 Microsoft.UI.Input.PointerPredictor API 对象进行处理。

应用生命周期

UWP 平台中已经存在大多数应用生命周期功能,并已将其引入 Windows 应用 SDK 以供桌面应用类型使用,特别是未封装的主机应用、Win32 应用、Windows 窗体应用和 WPF 应用。 这些功能的 Windows 应用 SDK 实现不能在 UWP 应用中使用,因为 UWP 平台本身中存在等效功能。

重要

如果使用的是 UWP 应用,请参阅从 UWP 迁移到 Windows 应用 SDK

非 UWP 应用也可以打包到 MSIX 包中。 虽然这些应用可以使用某些 Windows 应用 SDK 应用生命周期功能,但必须使用可用的清单方法。 例如,无法使用 Windows 应用 SDK RegisterForXXXActivation API,而必须改为通过清单注册丰富激活。

打包应用的所有约束也适用于打包的 WinUI 应用,并存在如下所述的其他注意事项。

重要注意事项

  • 丰富激活:GetActivatedEventArgs

  • 注册/注销丰富激活

    • 未打包应用:完全可用。
    • 打包应用:不可用,请改用应用的 MSIX 清单。
    • 有关详细信息,请参阅丰富激活
  • 单/多实例化

    • 未打包应用:完全可用。
    • 打包应用:完全可用。
    • WinUI 应用:如果应用想要检测其他实例并重定向激活,则必须在初始化任何窗口等之前尽早进行激活。若要启用此功能,应用必须定义 DISABLE_XAML_GENERATED_MAIN,并编写自定义 Main (C#) 或 WinMain (C++),以便执行检测和重定向。
    • RedirectActivationToAsync 是异步调用,并且如果应用在 STA 中运行,则不应等待异步调用。 对于 Windows 窗体和 C# WinUI 应用,如有必要,可以将 Main 声明为异步。 对于 C++ WinUI 和 C# WPF 应用,不能将 Main 声明为异步,因此需要将重定向调用移动到另一个线程,以确保不会阻止 STA。
    • 有关详细信息,请参阅应用实例化
  • 电源/状态通知

    • 未打包应用:完全可用。
    • 打包应用:完全可用。
    • 有关详细信息,请参阅电源管理

已知问题

  • 在设置 Verb 处理程序的命令行模板时,文件类型关联将 %1 错误地编码为 %251,这会导致未打包的 Win32 应用崩溃。 可以手动将注册表值编辑为 %1,作为部分解决方法。 如果目标文件路径中具有空格,则它仍将失败,并且没有针对该方案的解决方法。
  • 这些单/多实例化 bug 将在即将推出的服务修补中得到修复:
    • 针对 x86 进行编译时,AppInstance 重定向不起作用
    • 注册密钥,取消注册,然后重新注册会导致应用崩溃

DWriteCore

DWriteCore 是 DirectWrite 的 Windows 应用 SDK 实现(它是用于高质量文本呈现、与分辨率无关的大纲字体以及完整的 Unicode 文本和布局支持的 DirectX API)。 DWriteCore 是 DirectWrite 的一种形式,可在低至 Windows 10 版本 1809(10.0;内部版本 17763)的各种 Windows 版本上运行,并为跨平台使用它奠定了基础。

功能 DWriteCore 包含 DirectWrite 的所有功能,但有几个例外。

重要限制

  • DWriteCore 不包含以下 DirectWrite 功能:
    • 每会话字体
    • 最终用户定义的字符 (EUDC) 字体
    • 字体流式处理 API
  • 部分支持低级呈现 API。
  • DWriteCore 不会与 Direct2D 互操作,但你可以使用 IDWriteGlyphRunAnalysisIDWriteBitmapRenderTarget

有关详细信息,请参阅 DWriteCore 概述

MRT 核心

MRT 核心是新式 Windows 资源管理系统的简化版本,作为 Windows 应用 SDK 的一部分分发。

重要限制

  • 在 .NET 项目中,如果已生成应用,则复制粘贴到项目文件夹中的资源文件不会在 F5 上编制索引。 解决方法是重新生成应用。 有关详细信息,请参阅问题 1503
  • 在 .NET 项目中,使用 Visual Studio UI 将资源文件添加到项目时,默认情况下可能不会为文件编制索引。 有关详细信息,请参阅问题 1786。 若要解决此问题,请在 CSPROJ 文件中删除以下条目:
    <ItemGroup>
        <Content Remove="<image file name>" />
    </ItemGroup>
    <ItemGroup>
        <PRIResource Remove="<resw file name>" />
    </ItemGroup>
    
  • 对于未打包的 C++ WinUI 应用,资源 URI 未正确生成。 若要解决此问题,请在 vcxproj 中添加以下内容:
    <!-- Add the following after <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> -->
    
    <PropertyGroup>
        <AppxPriInitialPath></AppxPriInitialPath>   
    </PropertyGroup>
    

有关详细信息,请参阅使用 MRT Core 管理资源

部署

新功能和更新

重要限制

  • 用于引导程序 API 的 .NET 包装器仅供未打包的 .NET 应用程序使用,以简化对 Windows 应用 SDK 的访问。
  • 只有完全信任或具有 packageManagement 受限功能的 MSIX 应用包才有权使用部署 API 来安装主包和单独包依赖项。 对部分信任打包音乐的支持将在后面的版本中推出。
  • 当 F5 在 x64 系统上测试使用 DeploymentManager.Initialize 方法的 x86 应用时,请确保首先通过运行 WindowsAppRuntimeInstall.exe 安装 x64 框架。 否则,由于 Visual Studio 未部署 x64 框架(通常通过应用商店部署或旁加载发生),你将遇到 NOT_FOUND 错误。

其他限制和已知问题

  • 不支持任何 CPU 生成配置添加 Windows 应用 SDK 到支持任何 CPU 的现有 .NET 应用程序或组件时,必须指定所需的体系结构:x86x64arm64

  • 从 .NET 5 升级到 .NET 6:在 Visual Studio UI 中升级时,可能会遇到生成错误。 作为解决方法,请手动将项目文件的 TargetFrameworkPackage 更新为以下内容:

        <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework> 
    
  • 如果未安装 C++ UWP 工具,C# 单项目 MSIX 应用不会编译。 如果有 C# 单项目 MSIX 项目,则需要安装 C++ (v14x) 通用 Windows 平台工具可选组件。

  • 安装多个版本的 2019 Visual Studio 时,后续语言 VSIX 未能安装到 Visual Studio 2019 中。 如果安装了多个版本的 Visual Studio 2019(例如发行版和预览版),然后安装适用于 C++ C# 的 Windows 应用 SDK VSIX,则第二次安装会失败。 若要解决此问题,请在第一种语言 VSIX 之后卸载适用于 Visual Studio 2019 的单项目 MSIX 打包工具。 有关此问题的其他信息,请查看此反馈

  • DispatcherQueue.TryEnqueue(用于在调度程序队列线程上恢复执行)的替代方法是,使用 Windows 实现库 (WIL) 中的 resume_foreground 辅助函数:

    1. 将对项目的引用添加到Microsoft.Windows.ImplementationLibrary NuGet 包。
    2. #include <wil/cppwinrt_helpers.h> 添加到 pch.h
    3. #include <winrt/Microsoft.UI.Dispatching.h> 添加到 pch.h
    4. 立即co_await wil::resume_foreground(your_dispatcherqueue);

版本 0.8

Windows 应用 SDK 稳定渠道的 0.8.x 世系的最新可用版本为版本 0.8.12。

注意

Windows 应用 SDK 曾经的代号为 Project Reunion。 版本 0.8 及更早版本中的一些 SDK 资产仍使用该代号。 当引用现有资产或指定的早期版本时,文档的某些部分仍会采用 Project Reunion

版本 0.8.12

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 0.8.0 的关键 bug 修复。

注意

C# 开发人员需要以下 .NET SDK 版本之一:5.0.213、5.0.407、6.0.104、6.0.202(或更高版本)。 若要更新 .NET SDK 版本,请访问 .NET 下载或更新到最新版本的 Visual Studio。 在没有所需 .NET SDK 版本的情况下更新 NuGet 包时,你会看到如下错误:“此 WindowsAppSDK 版本需要 WinRT.Runtime.dll 版本 1.6 或更高版本。”

Bug 修复:

版本 0.8.11

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 0.8.0 的关键 bug 修复。

注意

C# 开发人员需要以下 .NET SDK 版本之一:5.0.213、5.0.407、6.0.104、6.0.202(或更高版本)。 若要更新 .NET SDK 版本,请访问 .NET 下载或更新到最新版本的 Visual Studio。 在没有所需 .NET SDK 版本的情况下更新 NuGet 包时,你会看到如下错误:“此 WindowsAppSDK 版本需要 WinRT.Runtime.dll 版本 1.6 或更高版本。”

Bug 修复:

  • 修复了使用鼠标选择文本时导致触发“失去焦点”事件的回归问题。

版本 0.8.10

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 0.8.0 的关键 bug 修复。

注意

C# 开发人员需要以下 .NET SDK 版本之一:5.0.213、5.0.407、6.0.104、6.0.202(或更高版本)。 若要更新 .NET SDK 版本,请访问 .NET 下载或更新到最新版本的 Visual Studio。 在没有所需 .NET SDK 版本的情况下更新 NuGet 包时,你会看到如下错误:“此 WindowsAppSDK 版本需要 WinRT.Runtime.dll 版本 1.6 或更高版本。”

Bug 修复:

  • 修复了在拖放操作期间导致应用有时崩溃的问题。

注意

Windows 应用 SDK 0.8.9 未发布。 在 0.8.8 之后直接发布的版本为 0.8.10。

版本 0.8.8

这是 Windows 应用 SDK 的服务版本,其中包含针对版本 0.8.0 的关键 bug 修复。

注意

C# 开发人员需要使用以下 .NET SDK 版本之一(或更高版本):6.0.202、6.0.104、5.0.407、5.0.213。 若要更新 .NET SDK 版本,请访问 .NET 下载或更新到最新版本的 Visual Studio。 在没有所需 .NET SDK 版本的情况下更新 NuGet 包时,你会看到如下错误:“此 WindowsAppSDK 版本需要 WinRT.Runtime.dll 版本 1.6 或更高版本。”

Bug 修复:

  • 修复了 TextBox 中有关软键盘和一般交互的触摸输入问题。 这些问题也影响了键盘快捷方式。 有关详细信息,请参阅 GitHub 上的问题 6291
  • 修复了应用窗口在处于活动状态时,有时显示为非活动状态的问题。
  • 修复了在外部进程中运行的 UIA(UI 自动化)导致的性能问题。
  • 修复了笔输入导致的应用稳定性问题。
  • 修复了 UIA 导致菜单中的 png 图标呈现显著延迟的问题。

版本 0.8.7

这是 Windows 应用 SDK 的服务版本,其中包含针对 C#/.NET 应用程序的多个性能更新。 若要更新到此版本,需要引用最新的 Windows SDK 包版本。 为此,请将属性 <WindowsSdkPackageVersion>10.0.<sdk_version>.24</WindowsSdkPackageVersion> 添加到 .csproj 文件,并从该文件中的 TargetFramework 属性添加应用所面向的 SDK 版本。 例如:

<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
       <OutputType>WinExe</OutputType>
       <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
       <TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
       <WindowsSdkPackageVersion>10.0.19041.24</WindowsSdkPackageVersion>
   <PropertyGroup>
   ...

在即将发布的 .NET 6 服务版本中将提供此版本的 Windows SDK 投影。 在 .NET SDK 更新可用后,应该从项目文件中删除 <WindowsSdkPackageVersion> 属性。

如果不设置此属性,将会出现如下错误:"Error: This version of Project Reunion requires WinRT.Runtime.dll version 1.6 or greater."

版本 0.8.6

这是 Windows 应用 SDK 的服务版本,包含针对 0.8.0 版本的适用于 C#/.NET 应用程序的多个性能改进。

若要更新到此版本的 Windows 应用 SDK,需要安装最新的 .NET SDK 12 月更新(请参阅下载 .NET2022 年 5 月 10 日将结束对 .NET 5 的支持)。 如果未安装所需的 .NET SDK 最低版本,将会出现 "Error: This version of Project Reunion requires WinRT.Runtime.dll version 1.4 or greater." 之类的错误

Bug 修复

有关性能改进的详细列表,请参阅 C#/WinRT 1.4.1 发行说明

版本 0.8.5

这是 Windows 应用 SDK 的服务版本,包含针对 0.8.0 版本的更多关键 bug 修复。

Bug 修复

  • 修复了导致使用指针输入的 WinUI 应用崩溃的问题。
  • 修复了在 Windows 11 上导致标题栏按钮(最小化、最大化、关闭)没有圆角的问题。
  • 修复了在 Windows 11 中将鼠标悬停在最大化/还原按钮上时导致布局大小调整选项不出现的问题。
  • 修复了在创建 PointCollection 对象时导致崩溃异常的问题。 有关详细信息,请参阅 Github 上的问题 971

版本 0.8 的限制和已知问题也适用于版本 0.8.5,除非在下面部分中另有说明。

版本 0.8.4

这是 Windows 应用 SDK 的服务版本,包含针对 0.8.0 版本的更多关键 bug 修复。

Bug 修复

  • 修复了自定义标题栏,以便 ContentDialog 不会覆盖它,并且标题栏按钮会呈现圆角。
  • 修复了更改显示缩放时图像处理中的崩溃。
  • 修复了 UI 消失或是未正确剪裁的剪裁 bug

版本 0.8 的限制和已知问题也适用于版本 0.8.4,除非在下面部分中另有说明。

版本 0.8.3

这是 Windows 应用 SDK 的服务版本,包含针对 0.8.0 版本的更多关键 bug 修复。

Bug 修复

最小化窗口后还原时,键盘焦点丢失,需要单击鼠标以还原焦点。

版本 0.8 的限制和已知问题也适用于版本 0.8.3,除非在下面部分中另有说明。

版本 0.8.2

这是 Windows 应用 SDK 的服务版本,包含针对 0.8.0 版本的更多关键 bug 修复。

Bug 修复

  • Windows 2022 预览版 2 及更高版本中现在支持 Windows 应用 SDK 和 WinUI 3。
  • 对于 .NET 应用,在传入枚举数组时,可能会收到以下错误:Object contains non-primitive or non-blittable data.
  • 在文本框内使用手写面板进行编写会导致崩溃
  • 图标/图像始终以 100% 缩放值加载,而不是基于监视器缩放值
  • EventSource<T> 的垃圾回收导致处理程序取消订阅后续失败(请参阅 GitHub 问题以了解更多详细信息)
  • 安全修复 - 有关更多详细信息,请参阅 CVE-2021-34533
  • SwapChainPanel.CompositionScaleChanged 有时会在更改显示缩放后返回不正确的 CompositionScale 值

版本 0.8 的限制和已知问题也适用于版本 0.8.2,除非在下面部分中另有说明。

版本 0.8.1

这是 Windows 应用 SDK 的服务版本,包含针对 0.8.0 版本的一些关键 bug 修复。

Bug 修复

  • Windows 应用 SDK 无法在最新 Windows 预览体验成员版本上运行
  • 输入在下拉列表中未出现的值时,EditableComboBox 中发生崩溃
  • 收到焦点后,WebView2 不允许用户按 Tab 键退出
  • 在 WinUI 生成的代码中完全限定 Windows.Foundation.Metadata.DefaultOverload 命名空间,以避免命名空间多义性
    • 这修复了 bug #5108
  • 安全修复 - 有关更多详细信息,请参阅 CVE-2021-34489

版本 0.8 的限制和已知问题也适用于版本 0.8.1,除非在下面部分中另有说明。

版本 0.8.0 稳定版

新功能和更新

此版本支持所有稳定通道功能

WinUI 3

此版本包括许多 bug 修复,并改进了在 WinUI 3 中的稳定性。 这些是自 WinUI 3 - Project Reunion 0.5 发布以来 WinUI 3 中的所有新更改:

  • 透视控件已重新添加,现在可以在任何 WinUI 3 应用中使用。

  • 此版本包含来自 Project Reunion v0.5.5、v0.5.6 和 v0.5.7 的所有 bug 修复。

  • 新 bug 修复,包括:

    • 用鼠标右键单击 TextBox 会导致应用程序崩溃
    • NavigationView 导致 UWP 出现崩溃,Reunion 0.5 预览版
    • 进度栏不显示“暂停”和“错误”选项之间的区别
    • 复制/粘贴/更改文本样式时 RichEditBox 中发生崩溃
    • SetTitleBar 未设置或为 null 时,窗口标题按钮放置到错误位置

    有关此版本中解决的 bug 的完整列表,请参阅我们的 GitHub 存储库

  • ColorHelper.ToDisplayName API 不再可用。

  • 以下类型已删除:

    • Microsoft.Graphics.IGeometrySource2D
    • Microsoft.Graphics.IGeometrySource2DInterop

    请改用 Windows.Graphics.IGeometrySource2DWindows.Graphics.IGeometrySource2DInterop

  • Microsoft.System 命名空间中的所有类型都已移到 Microsoft.UI.Dispatching 命名空间,包括 DispatcherQueue 类

  • AcrylicBrush.BackgroundSource 属性已删除,因为 WinUI 3 不支持将 HostBackdrop 作为 BackgroundSource

有关 WinUI 的详细信息,请参阅 Windows UI 3 库 (WinUI)

若要查看 WinUI 3 控件和功能的运行情况,可从 GitHub 克隆并生成 WinUI 3 库应用,或从 Microsoft Store 下载应用。

若要开始使用 WinUI 进行开发,请查看以下文章:

DWriteCore

此版本的 DWriteCore 包括以下新增功能和更新的功能。 DWriteCore 概述中介绍了 DWriteCore 并进行了说明。

注意

DWriteCoreCreateFactory 在功能上与 DirectWrite 系统版本导出的 DWriteCreateFactory 函数相同。 DWriteCore 函数具有不同名称,以避免在链接 DWriteCore.libDWrite.lib 时出现多义性。

有关 DWriteCore 和 DirectWrite API 参考,请参阅 DWriteCore API 参考DirectWrite API 参考

MRTCore

  • 在向项目添加资源时会自动设置资源的生成操作,从而减少了手动项目配置需求。

限制

  • Windows 预览体验计划的开发频道上当前不支持此版本。 这在版本 0.8.1 中得到修复

  • 桌面应用(C# 或 C++ 桌面):仅支持在使用 MSIX 打包的桌面应用(C++ 或 C#)中使用此版本。 若要在未打包桌面应用中使用 Windows 应用 SDK,必须使用实验版通道

重要

如果使用的是 UWP 应用,请参阅从 UWP 迁移到 Windows 应用 SDK

已知问题

  • 版本 0.8 及更高版本中的 WinUI 3 工具(如实时可视化树、实时属性资源管理器和热重载)需要 Visual Studio 2019 16.11 预览版 3 及更高版本。

  • 当前使用 WinUI 3 和 Windows 应用 SDK 0.8 的应用无法使用利用 Project Reunion 0.5 的类库。 更新类库以使用 Windows 应用 SDK 0.8。

  • .NET 应用必须面向内部版本 18362 或更高版本:TFM 必须设置为 net6.0-windows10.0.18362 或更高版本,并且打包项目必须设置为 18362 或更高版本。 有关详细信息,请参阅 GitHub 问题 #921

  • 在浅色与深色模式之间频繁切换时,可能会遇到崩溃。

  • 对于 .NET 应用,在传入枚举数组时,可能会收到以下错误:Object contains non-primitive or non-blittable data.这在版本 0.8.2 中得到修复

  • 对于 .NET 应用,当前无法选择退出使用 Visual Studio UI 将图像作为应用资源来编制索引。 若要解决此问题,请将 Directory.Build.targets(请参阅自定义生成 - Visual Studio 以了解说明)添加到项目并删除图像,如下所示:

    • 若要删除特定图像(请注意,需要相对路径),请执行以下操作:

      <Project> 
      <ItemGroup> 
          <Content Remove="..\Bitmap1.bmp" />
      </ItemGroup>
      </Project>
      
    • 若要基于元数据删除图像,请执行以下操作:

      <Project>
      <ItemGroup>
          <Content Remove="@(None->WithMetadataValue('Pack','true'))" />
      </ItemGroup>
      </Project>
      

    计划在即将发布的版本中对此问题进行修复 — 届时,将不再需要以上解决方法。

版本 0.5

Windows 应用 SDK 稳定渠道的 0.5.x 世系的最新可用版本为版本 0.5.9

新功能和更新

此版本支持所有稳定通道功能

已知问题和限制

此版本具有以下限制和已知问题:

  • 桌面应用(C# 或 C++ 桌面):仅支持在使用 MSIX 打包的桌面应用(C++ 或 C#)中使用此版本。 若要在未打包桌面应用中使用 Windows 应用 SDK,必须使用实验版通道
  • .NET 应用必须面向内部版本 18362 或更高版本:TFM 必须设置为 net6.0-windows10.0.18362 或更高版本,并且打包项目的 <TargetPlatformVersion> 必须设置为 18362 或更高版本。 有关详细信息,请参阅 GitHub 上的已知问题

重要

如果使用的是 UWP 应用,请参阅从 UWP 迁移到 Windows 应用 SDK