Windows 应用 SDK 1.1 的稳定通道发行说明
稳定通道提供支持在生产环境中供应用使用的 Windows App SDK 版本。 使用 Windows App SDK 稳定版本的应用还可以发布到 Microsoft Store。
重要链接:
- 如果要将现有应用从较旧版本的 Windows App SDK 升级到较新版本,请参阅将现有项目更新到 Windows App SDK 的最新版本。
最新稳定通道版本:
下载 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 修复。
Bug 修复 (1.1.5)
- 修复了在启用 Mica 时 Acrylic 不起作用的问题。 有关详细信息,请参阅 GitHub 上的问题 7200。
- 修复了导致依赖于 WindowsAppRuntime 安装程序的应用(例如未打包的应用)无法在 Windows 10 ARM64 计算机上运行的问题。 有关详细信息,请参阅 GitHub 上的问题 2564。
版本 1.1.4
这是 Windows 应用 SDK 的服务版本,其中包含针对版本 1.1 的关键 bug 修复。
Bug 修复 (1.1.4)
- 修复了从 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 修复 (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 修复。
Bug 修复 (1.1.2)
- 修复了在对话框处于打开状态的情况下关闭窗口时 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 修复 (1.1.1)
- 修复了在拖放操作期间导致应用有时崩溃的问题。 有关详细信息,请参阅 GitHub 上的问题 7002。
- 修复了在将 AppWindowPresenterKind 从 FullScreen 切换为 Default 时导致标题栏消失的问题。
- 修复了
ApiInformation.IsPropertyPresent
和ApiInformation.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 文档。
- 这是 UWP
WinUI 3
WinUI 3 是一种适用于 Windows App SDK 的本机用户体验 (UX) 框架。 此版本包含 WinAppSDK 1.0 中的新功能,以及 1.0 和 1.1 预览版中的多项稳定性改进。
新功能:
- Mica 和 Background Acrylic 现在适用于 WinUI 3 应用程序。
- 有关这些材料的详细信息,请查看 Windows 11 中的材料。 查看我们的示例代码,以便通过在适用于 Windows 11 的桌面应用中应用 Mica 或 Acrylic 材料来了解如何在 C++ 应用程序中应用 Mica,以及如何在 GitHub 上的 C# 应用程序中应用 Mica,从而将其作为 WinUI 3 库的一部分。
- 我们已稳定化并已启用在 WinUI 3 应用程序中的同一线程上创建多个窗口的功能,此功能首先在 1.0.1 中引入。 有关详细信息,请参阅问题 5918。
修复的 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 会崩溃。
部署
新功能:
- 打包的应用现在可以通过使用 DeploymentManager.Initialize(DeploymentInitializeOptions) API,或者通过在 Windows App Runtime 安装程序中使用 --force 选项,来强制部署 Windows 应用 SDK 运行时包。
- 还有其他功能扩展类别 (UnlockedDEHs) 适用于打包的应用。 有关更多详细信息,请查看 1.1 预览版 3 发行说明。 这些扩展要求安装 Windows 应用 SDK 框架包。 请参阅最新 Windows 应用 SDK 下载来安装运行时。
- 支持独立部署。 查看 Windows 应用 SDK 部署概述,了解依赖于框架的部署和独立部署之间的差别,以及如何开始部署。
- 不使用 MSIX 部署的应用所需的引导程序 API 包含用于改进可用性和故障排除的新选项。 对于 C# 应用,请查看引导程序 C# API 文档;对于 C++ 应用,请查看 mddbootstrapheader.h 标头文档。 有关更多详细信息,请参阅将 Windows 应用 SDK 运行时用于使用外部位置打包的应用或未打包的应用。
已知限制:
- 运行 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
应用现在能够以提升的特权运行。
已知限制:
- 提升的支持需要以下 OS 服务更新:
- 不支持提升的未打包应用的应用通知和推送通知。
- 在进行拖放式交互期间拖动某个元素时,提升的 WinUI 3 应用会崩溃。
环境变量管理器
环境变量管理器是 Windows 应用 SDK 1.1 中引入的新 API。 开发人员可以使用环境变量管理器从一个 API 外围应用访问和修改进程、用户和计算机范围内的环境变量。
如果从打包的应用程序中使用环境变量管理器,则会记录所有环境变量操作。 删除包后,将还原所有环境变量操作。
新功能:
- 获取和设置进程、用户和计算机范围内的环境变量。
- 删除使用环境变量管理器的包时会自动还原环境变量。
- 包含用于 PATH 和 PATHEXT 的特定 API。
已知限制:
- 仅适用于 Windows 11
MRT Core
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 中实现的功能(请参阅窗口和消息),此版本在自身的 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"。