Windows 应用 SDK 的稳定通道发行说明
稳定通道提供支持在生产环境中供应用使用的 Windows 应用 SDK 版本。 使用 Windows 应用 SDK 稳定版本的应用还可以发布到 Microsoft Store。
当前提供稳定通道的以下版本:
如果要将现有应用从较旧版本的 Windows 应用 SDK 升级到较新版本,请参阅将现有项目更新到 Windows 应用 SDK 的最新版本。
Windows 应用 SDK 下载
可在 Windows 应用 SDK 下载页面中获取 Windows 应用 SDK VSIX 和运行时(安装程序和 MSIX 包)。 SDK 下载内容包括 Visual Studio 扩展,可以使用 Windows 应用 SDK 通过该扩展创建和生成新项目。 运行时下载内容包括用于部署应用的安装程序和 MSIX 包。 安装 Windows 应用 SDK 工具(如果尚未这样做)。
注意
如果已安装 Windows 应用 SDK Visual Studio (VSIX) 扩展,则在安装新版本之前卸载这些扩展。 有关说明,请参阅管理 Visual Studio 的扩展。
版本 1.3
版本 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 规范。
其他更新
- 参阅 WinAppSDK GitHub 上的 WinAppSDK 1.3 里程碑,了解此版本中解决的其他问题。
- 参阅 microsoft-ui-xaml GitHub 上的 WinAppSDK 1.3 里程碑中的 WinUI 3,了解此版本中解决的其他问题。
- 现在,使用最新的试验性 VSIX,可以通过 Visual Studio 菜单在未打包和打包之间转换应用,而无需在项目文件中执行此操作。
已知问题
由于最近对 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 应用可以使用 MediaPlayerElement 和 MediaTransportControls 媒体播放控件来播放音频和视频。 有关如何以及何时使用媒体控件的详细信息,请参阅媒体播放器。
已使用 WinUI 2.8 中的最新控件、样式和行为更新了 WinUI 3。 这些更新包括添加了 InfoBadge 控件、改进了辅助功能和高对比度模式,以及控件的 bug 修复。 有关详细信息,请参阅 WinUI 2.7 和 WinUI 2.8 的发行说明。
已修复的问题
- Windows 10 应用现在支持带有 DesktopAcrylicController 的 Acrylic 背景材料。 有关详细信息,请查看 GitHub 上的问题 7112。
- 修复了导致 App.UnhandledException 路由失败的各种问题。 有关详细信息,请查看 GitHub 上的问题 5221。 有关其余问题,解决方法记录在以下 GitHub 问题中,这些问题在将来的版本 1.2 中将予以解决:
- 修复了导致 ListView 样式从 WinAppSDK 1.1 回归和更改的问题。 有关详细信息,请查看 GitHub 上的问题 7666。
- 修复了当应用处于非活动状态时,导致出现错误的 Mica 回退背景色的问题。 有关详细信息,请查看 GitHub 上的问题 7801。
已知的限制
- 使用 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 的 Windows 和 Arm64 Visual Studio。
通知
AppNotificationBuilder 作为 XML 有效负载的替代方案引入,用于创建和定义应用通知。
有关使用信息,请参阅 GitHub 上的 AppNotificationBuilder 规范。
另请参阅快速入门:Windows 应用 SDK 中的应用通知,以获取有关如何创建发送和接收本地应用通知的 Windows 桌面应用程序的示例。
中断性变更
对于推送通知,在发出通道请求调用时,应用需要使用 Azure 对象 ID 而不是 Azure 应用 ID。 有关查找 Azure 对象 ID 的详细信息,请参阅快速入门:Windows 应用 SDK 中的推送通知。
修复的问题
PushNotificationManager.IsSupported 将执行提升模式检查。 如果应用已提升,它将返回 false
。
已知限制(通知)
- 在 AppNotificationScenario 中,
Urgent
仅支持 Windows 版本 19041 及更高版本。 可以使用 AppNotificationBuilder.IsUrgentScenarioSupported 检查该功能在运行时是否可用。 - 在 AppNotificationButton 中,
hint-toolTip
和hint-buttonStyle
仅支持版本 19041 及更高版本。 可以使用 IsButtonStyleSupported 和 IsToolTipSupported 检查该功能在运行时是否可用。 - 在 MediaPlayerElement 中,在未打包应用的 XAML 标记中使用 Source 属性时,无法使用 ms-appx 或 ms-resource URI 设置该属性。 替代做法是使用文件 URI 设置 Source,或者从代码设置。
窗口化
现在,可以通过 AppWindowTitleBar 类在 Windows 10 版本 1809 及更高版本中使用完整的标题栏自定义。 可以将 AppWindowTitleBar.ExtendsContentIntoTitleBar 设置为 true
以将内容扩展到标题栏区域,并设置 SetDragRectangles 以定义拖动区域(此外还可以设置其他自定义选项)。
如果你一直在使用 AppWindowTitleBar.IsCustomizationSupported 属性来检查是否可以调用 AppWindowTitleBar API,它现在会在支持的 Windows 应用 SDK Windows 10 版本(1809 及更高版本)上返回 true
。
已知限制(窗口)
Windows 10 不支持基本标题栏自定义。 这些属性包括 BackgroundColor、InactiveBackgroundColor、ForegroundColor、InactiveForegroundColor 和 IconShowOptions。 如果你调用这些属性,将以静默方式忽略它们。 所有其他 AppWindowTitleBar API 都可以在 Windows 10 版本 1809 及更高版本中使用。 对于标题按钮颜色 API(及其他 API)和 Height,ExtendsContentIntoTitleBar 必须设置为 true
,否则也会以静默方式将其忽略。
访问控制
引入了 security.accesscontrol.h 和 GetSecurityDescriptorForAppContainerNames 函数,以简化和条理化打包进程与常规 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>
在项目中显式启用自动初始化表达式。
- 如果需要在不可执行文件(例如,由不初始化引导程序的通用可执行文件加载的测试 DLL)中使用自动初始化表达式,可以通过
- 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.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 应用 SDK 的本机用户体验 (UX) 框架。 此版本包含 WinAppSDK 1.0 中的新功能,以及 1.0 和 1.1 预览版中的多项稳定性改进。
新功能:
- Mica 和 Background Acrylic 现在适用于 WinUI 3 应用程序。
- 有关这些材料的详细信息,请查看 Windows 11 中的材料。 在将 SystemBackdropController 与 WinUI 3 XAML 配合使用和 GitHub 上的 WinUI 3 库中分别查看有关在 C++ 应用程序和 C# 应用程序中应用 Mica 的示例代码。
- 我们已稳定化并已启用在 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 核心
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’中找到资源。”
- 引用 C++ Windows 运行时组件的 C++ 或 C# 应用中的运行时错误:
使用单项目 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 应用(未打包的应用)的已知问题:
- 某些 API 需要程序包标识符,在未打包的应用中不受支持,例如:
- ApplicationData
- StorageFile.GetFileFromApplicationUriAsync
- StorageFile.CreateStreamedFileFromUriAsync
- ApiInformation(在 Windows 10 上不受支持)
- Package.Current
- Windows.ApplicationModel.Resources 命名空间中的任何 API
- Microsoft.Windows.ApplicationModel.Resources 命名空间中的任何 API
- 某些 API 需要程序包标识符,在未打包的应用中不受支持,例如:
打包和部署 WinUI 应用程序时的已知问题:
- 具有单项目 MSIX(“打包的空白应用”模板)的 WinUI 应用中不支持
Package
命令。 改为使用Package & Publish
命令创建 MSIX 包。 - 若要使用
Pack
命令从 C# 类库创建 NuGet 包,请确保活动Configuration
为Release
。 - C++ Windows 运行时组件中不支持
Pack
命令以创建 NuGet 包。
- 具有单项目 MSIX(“打包的空白应用”模板)的 WinUI 应用中不支持
有关详细信息,或开始使用 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 图面以实现更高级的输入交互。
新功能
- 指针 API:PointerPoint、PointerPointProperties 和 PointerEventArgs,用于支持通过 XAML 输入 API 检索指针事件信息。
- InputPointerSource API:表示为报告指针输入而注册的对象,可为 XAML 的 SwapChainPanel API 提供指针光标和输入事件处理。
- Cursor API:使开发人员可以更改光标位图。
- GestureRecognizer API:使开发人员可以识别某些手势,如在提供指针信息时拖动、按住和单击。
重要限制
- 已删除所有 PointerPoint静态工厂函数:GetCurrentPoint、GetCurrentPointTransformed、GetIntermediatePoints 及 GetIntermediatePointsTransformed。
- Windows 应用 SDK 不支持检索具有指针 ID 的“PointerPoint”对象。 相反,可以使用“PointerPoint”成员函数“GetTransformedPoint”,检索现有“PointerPoint”对象的转换版本。 对于中间点,可以使用“PointerEventArgs”成员函数 GetIntermediatePoints 和 GetTransformedIntermediatePoints。
- 直接使用平台 SDK API Windows.UI.Core.CoreDragOperation 不适用于 WinUI 应用程序。
- 删除了 PointerPoint 属性的 RawPosition 和 ContactRectRaw,因为它们引用了非预测值,这与操作系统中的常规值相同。 请改为使用位置和 ContactRect。 指针预测现在通过 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
。 请注意,平台定义了 Windows.ApplicationModel.AppInstance,而 Windows 应用 SDK 定义了 Microsoft.Windows.AppLifecycle.AppInstance。 虽然 UWP 应用可以使用ActivatedEventArgs
类(如FileActivatedEventArgs
和LaunchActivatedEventArgs
),但使用 Windows 应用 SDK AppLifecycle 功能的应用必须使用接口而不是类(例如IFileActivatedEventArgs
、ILaunchActivatedEventArgs
等)。 - WinUI 应用:为 WinUI 的 App.OnLaunched 提供 Microsoft.UI.Xaml.LaunchActivatedEventArgs,而平台
GetActivatedEventArgs
返回 Windows.ApplicationModel.IActivatedEventArgs,且 WindowsAppSDKGetActivatedEventArgs
返回 Microsoft.Windows.AppLifecycle.AppActivationArguments 对象,可表示平台LaunchActivatedEventArgs
。 - 有关详细信息,请参阅丰富激活。
注册/注销丰富激活
- 未打包应用:完全可用。
- 打包应用:不可用,请改用应用的 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 互操作,但你可以使用 IDWriteGlyphRunAnalysis 和 IDWriteBitmapRenderTarget。
有关详细信息,请参阅 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 管理资源。
部署
新功能和更新
- 可以通过
WindowsPackageType project
属性自动初始化 Windows 应用 SDK,以加载 Windows 应用 SDK 运行时并调用 Windows 应用 SDK API。 有关说明,请参阅创建第一个 WinUI 3 项目。 - 未打包的应用可以通过将独立 Windows 应用 SDK
.exe
安装程序集成到现有 MSI 或安装程序中来部署 Windows 应用 SDK。 有关详细信息,请参阅依赖于框架的使用外部位置打包的应用或未打包应用的 Windows 应用 SDK 部署指南。 - 未打包 .NET 应用还可以将 .NET 包装器用于引导程序 API,以在运行时动态获取 Windows 应用 SDK 框架包上的依赖项。 有关 .NET 包装器详细信息,请参阅 .NET 包装器库。
- 打包的应用可以使用部署 API 验证并确保计算机上安装所有必需的包。 有关部署 API 工作原理的详细信息,请参阅依赖于框架的打包应用的 Windows 应用 SDK 部署指南。
重要限制
- 用于引导程序 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 应用程序或组件时,必须指定所需的体系结构:
x86
、x64
或arm64
。从 .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 Helper 函数:
- 将对项目的引用添加到Microsoft.Windows.ImplementationLibrary NuGet 包。
- 将
#include <wil/cppwinrt_helpers.h>
添加到pch.h
。 - 将
#include <winrt/Microsoft.UI.Dispatching.h>
添加到pch.h
。 - 立即
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 修复:
- 修复了带有 SwapChainPanel 或 WebView2 的应用因访问冲突而意外崩溃的问题。
版本 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 月更新(请参阅下载 .NET 和 2022 年 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.IGeometrySource2D
和Windows.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 并进行了说明。
- DWriteCore 现在支持下划线 — 请参阅 IDWriteTextLayout::GetUnderline 和 IDWriteTextLayout::SetUnderline。
- 支持删除线 — 请参阅 IDWriteTextLayout::GetStrikethrough 和 IDWriteTextLayout::SetStrikethrough。
- 通过 IDWriteTextLayout 支持垂直文本 — 请参阅垂直文本。
- 实现了 IDWriteTextAnalyzer 和 IDWriteTextAnalyzer1 接口的所有方法。
- DWriteCoreCreateFactory free 函数创建一个工厂对象,该对象用于后续创建各个 DWriteCore 对象。
注意
DWriteCoreCreateFactory 在功能上与 DirectWrite 系统版本导出的 DWriteCreateFactory 函数相同。 DWriteCore 函数具有不同名称,以避免在链接 DWriteCore.lib
和 DWrite.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。