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

稳定通道提供适用于生产环境应用的 Windows 应用 SDK 版本。 使用 Windows App SDK 稳定版本的应用还可以发布到 Microsoft Store。

重要链接

最新的稳定频道版本:

下载 Windows App SDK

注释

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

版本 1.1

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

版本 1.1.5

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

错误修复(1.1.5)

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

版本 1.1.4

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

错误修复(1.1.4)

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

版本 1.1.3

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

错误修复(1.1.3)

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

版本 1.1.2

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

漏洞修复(1.1.2)

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

版本 1.1.1

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

故障修复(1.1.1)

  • 修复了导致应用在拖放操作期间有时崩溃的问题。 有关详细信息,请参阅 GitHub 上的 问题 7002
  • 修复了将 AppWindowPresenterKind 从 FullScreen 切换为默认值时导致标题栏消失的问题。
  • 修复了 Bootstrapper API 类似 ApiInformation.IsPropertyPresentApiInformation.IsMethodPresent 会导致未打包的应用中出现未经处理的异常的问题。 有关详细信息,请参阅 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 的特定参数和状态生成来启动显式重启,以便在更新、挂起和重启的情况下向操作系统注册。

新功能:

  • 任何打包或解压缩的桌面应用都可以在命令上终止并重启自身,并有权使用 AppInstance.Restart() API 访问重启实例的任意命令行字符串。
    • 这是 UWP RequestRestartAsync() API 的提升和同步版本,它允许使用参数重启,并在重启失败时返回一个 AppRestartFailureReason
    • 请查看 GitHub 上的 重启 API 文档以获取使用情况和参考信息。

WinUI 3

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

新功能:

修复了漏洞:

  • 修复了使用 Mica 时,当窗口被两个屏幕均等划分时应用崩溃的问题。 有关详细信息,请参阅 GitHub 上的 问题 7079
  • 修复了因为未安装 C/C++ 运行时(CRT),导致使用 WebView2 的 C# 应用在启动时崩溃的问题,方法是将 WebView2 SDK 从 1020.46 升级到 1185.39。
  • 修复了导致某些圆角在应为单一颜色时显示渐变的问题。 有关详细信息,请参阅 GitHub 上的 问题 6076问题 6194
  • 修复了 generic.xaml 中缺少更新样式的问题。
  • 修复了在滚动到 ListView 末尾时导致应用崩溃的布局周期问题。 有关详细信息,请参阅 GitHub 上的 问题 6218
  • 修复了启用拖放功能时用户无法删除元素的问题。 有关详细信息,请参阅 GitHub 上的 问题 7008

已知限制:

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

部署

新功能:

已知限制:

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

海拔

应用现在可以使用提升的权限运行。

已知限制:

环境变量管理器

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

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

新功能:

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

已知限制:

  • 仅在 Windows 11 上可用

MRT 核心

MRT Core 是新式 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(参见 Windows 和消息)中实现的功能,此版本在 AppWindow 中扩展了对这些功能的支持。

新功能:

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

修复了以下问题:

  • 首次启用全屏显示模式时,窗口现在可以正确覆盖整个屏幕。 有关详细信息,请参阅 GitHub 上的 问题 1853
  • 通过 AppWindow::GetFromWindowId 创建的 Windows 具有 OverlappedPresenter 作为默认演示者,但不限制来自其他 API 的窗口样式更改。 使用 AppWindow::Create 创建的 Windows 将从一开始就具有默认演示者防护措施。 有关详细信息,请参阅 GitHub 上的 问题 2049
  • 使用 OverlappedPresenter.SetBorderAndTitlebar API 隐藏标题按钮和边框会导致最大化时出现 1px 的顶部边框。 此问题已解决。 有关详细信息,请参阅 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”。