Microsoft Windows App SDK 1.0 稳定版发布,可供下载(发行说明)

阅读时间图标 12分钟读


读者帮助支持 MSpoweruser。如果您通过我们的链接购买,我们可能会获得佣金。 工具提示图标

阅读我们的披露页面,了解如何帮助 MSPoweruser 维持编辑团队 查看更多

用户界面

经过几次预览版之后,微软刚刚发布了 Windows App SDK 1.0.0 Stable,这是一个工具包,使桌面应用程序开发人员能够构建具有现代 Windows UI、API 和平台功能的应用程序。

在此版本中,Microsoft 添加了 Windows App SDK 0.8 中的多项新功能,并稳定了 1.0 预览版中的问题。

[lwptoc 标题=”WindowsAppSDK 1.0 稳定版”宽度=”30%”浮动=”右”]

用户界面 3

WinUI 3 是 Windows App SDK 的本机用户体验 (UX) 框架。

新功能和更新:

  • Microsoft 添加了新控件(PipsPager、Expander、BreadcrumbBar)并更新了现有控件以反映最新的 Windows 样式 用户界面 2.6.
  • 通过使用“Blank App, Packaged...”模板创建新应用程序,WinUI 支持单项目 MSIX 打包。
  • Microsoft 现在支持在 Windows 3 及更高版本上部署没有 MSIX 打包的 WinUI 1809 应用程序。 请查看 创建一个 WinUI 3 未打包的桌面应用程序 了解更多信息。
  • WinUI 3 项目现在可以将其目标版本设置为 Windows 10 版本 1809。以前,它们只能设置为版本 1903。
  • Visual Studio 2022 Preview 5 和 GA 支持用于 WinUI 打包应用的应用内工具栏、热重载和 Live Visual Tree。

重要限制:

  • 已知问题 打包和未打包的 WinUI 应用程序:
    • 引用 C++ Windows 运行时组件的 C++ 应用程序中的运行时错误: 要解决此问题,请将以下目标添加到 Windows 运行时组件的 .vcxproj 末尾:

      XML

      <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>
      
  • 已知问题 带有单项目 MSIX 的 WinUI 应用程序 (空白应用,打包模板):
    • 在重新启动 Visual Studio 之前,缺少 Package & Publish 菜单项: 在 Visual Studio 2019 和 Visual Studio 2022 中使用空白应用打包(桌面中的 WinUI 3)项目模板创建具有单项目 MSIX 的新应用时,发布项目的命令不会出现在菜单中,直到您关闭并重新打开 Visual Studio。
    • 如果没有安装“C++ (v14x) Universal Windows Platform Tools”可选组件,带有单项目 MSIX 的 AC# 应用将无法编译。 看法 安装开发者工具 了解更多信息。
    • 使用在引用的 Windows 运行时组件中定义的类型的单项目 MSIX 应用中的潜在运行时错误: 要解决,手动添加 可激活的类条目 到 appxmanifest.xml。
      • C# 应用程序中的预期错误是“COMException:未注册类 (0x80040154 (REGDB_E_CLASSNOTREG))。
      • C++/WinRT 应用程序中的预期错误是“winrt::hresult_class_not_registered”。
  • 已知问题 没有 MSIX 打包的 WinUI 应用程序 (未打包的应用程序):
  • 已知问题 打包和部署 WinUI 应用程序:
    •  Package 具有单项目 MSIX(空白应用程序,打包模板)的 WinUI 应用程序不支持命令。 相反,使用 Package & Publish 命令来创建一个 MSIX 包。
    • 使用 C# 类库创建 NuGet 包 Pack 命令,确保活动 Configuration is Release.
    •  Pack C++ Windows 运行时组件不支持使用命令创建 NuGet 包。

加窗

Windows 应用 SDK 提供了一个 应用窗口 该类改进了以前易于使用的 Windows.UI.WindowManagement.AppWindow 预览类,并使其可用于所有 Windows 应用程序,包括 Win32、WPF 和 WinForms。

新功能

  • 应用窗口 是一个高级窗口化 API,它允许易于使用的窗口化场景与 Windows 用户体验和其他应用程序很好地集成。 表示应用程序内容的系统管理容器的高级抽象。 这是托管内容的容器,代表用户在屏幕上调整大小和移动应用程序时与之交互的实体。 对于熟悉 Win32 的开发人员来说,AppWindow 可以看作是 HWND 的高级抽象。
  • 显示区域 表示 HMONITOR 的高级抽象,遵循与 AppWindow 相同的原则。
  • 显示区域观察器 允许开发人员观察显示拓扑的变化并枚举系统中当前定义的 DisplayArea。

输入

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

新功能

重要限制

  • 所有类型 指针点 静态工厂函数已被删除: 获取当前点获取当前点转换获取中级点及 获取中间点转换.
  • Windows 应用 SDK 不支持检索 指针点 具有指针 ID 的对象。 相反,您可以使用 指针点 成员函数 获取转换点 检索现有的转换版本 指针点 目的。 对于中间点,您可以使用 指针事件参数 成员功能 获取中级点 和 获取转换中间点.
  • 直接使用平台SDK API Windows.UI.Core.CoreDragOperation 不适用于 WinUI 应用程序。
  • 指针点   原始位置 和 联系RectRaw 被删除是因为它们引用了非预测值,这些值与操作系统中的正常值相同。 利用 职务 和 联系方式 反而。 指针预测现在用 Microsoft.UI.Input.PointerPredictor API 对象。

应用生命周期

大多数应用生命周期功能已经存在于 UWP 平台中,并且已被引入 Windows 应用 SDK 以供桌面应用类型使用,尤其是未打包的控制台应用、Win32 应用、Windows 窗体应用和 WPF 应用。 这些功能的 Windows 应用 SDK 实现不能在 UWP 应用中使用,因为 UWP 平台本身具有等效功能。

 重要

如果你正在开发 UWP 应用,请参阅 UWP 迁移指南 了解有关将您的应用迁移到 Windows App SDK 的更多信息。

非 UWP 应用也可以打包到 MSIX 包中。 虽然这些应用程序可以使用某些 Windows 应用程序 SDK 应用程序生命周期功能,但它们必须在可用的情况下使用清单方法。 例如,他们不能使用 Windows App SDK 注册ForXXXActivation API 并且必须改为通过清单注册丰富的激活。

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

重要考虑因素:

  • 丰富的激活: 获取激活事件参数
  • 注册/取消注册丰富的激活
    • 未打包的应用程序: 完全可用。
    • 打包的应用程序:不可用,请改用应用的 MSIX 清单。
    • 有关详细信息,请参阅 丰富的激活.
  • 单/多实例
    • 未打包的应用程序: 完全可用。
    • 打包的应用程序: 完全可用。
    • WinUI 应用程序:如果应用程序想要检测其他实例并重定向激活,它必须尽早这样做,并且在初始化任何窗口等之前。要启用此功能,应用程序必须定义 DISABLE_XAML_GENERATED_MAIN,并编写自定义 Main (C#) 或WinMain (C++) 可以进行检测和重定向。
    • 重定向激活到异步 是异步调用,如果您的应用在 STA 中运行,则不应等待异步调用。 对于 Windows 窗体和 C# WinUI 应用程序,如有必要,您可以将 Main 声明为异步。 对于 C++ WinUI 和 C# WPF 应用程序,您不能将 Main 声明为异步,因此您需要将重定向调用移动到另一个线程以确保您不会阻塞 STA。
    • 有关详细信息,请参阅 应用实例化.
  • 电源/状态通知
    • 未打包的应用程序: 完全可用。
    • 打包的应用程序: 完全可用。
    • 有关详细信息,请参阅 电源管理.

已知问题:

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

写核心

DWriteCore 是 Windows App SDK 的实现 DirectWrite的,它是用于高质量文本渲染、与分辨率无关的轮廓字体以及完整的 Unicode 文本和布局支持的 DirectX API。 DWriteCore 是 DirectWrite 的一种形式,可在 Windows 版本低至 Windows 10 版本 1809(10.0;Build 17763)上运行,并为您跨平台使用它打开了大门。

特征 DWriteCore 包含 DirectWrite 的所有功能,但有一些例外。

重要限制

  • DWriteCore 不包含以下 DirectWrite 功能:
    • 每会话字体
    • 最终用户定义字符 (EUDC) 字体
    • 字体流 API
  • 低级渲染 API 支持是部分的。
  • DWriteCore 不与 Direct2D 互操作,但您可以使用 IDWriteGlyphRun分析 和 IDWriteBitmapRenderTarget.

捷运核心

MRT Core 是现代 Windows 的精简版 资源管理系统 它作为 Windows 应用 SDK 的一部分分发。

重要限制

  • 在 .NET 项目中,如果应用程序已构建,则复制粘贴到项目文件夹中的资源文件不会在 F5 上建立索引。 作为一种解决方法,重建应用程序。 看 发行1503 获取更多信息。
  • 在 .NET 项目中,当使用 Visual Studio UI 将资源文件添加到项目中时,默认情况下这些文件可能不会被索引。 看 发行1786 了解更多信息。 要解决此问题,请删除 CSPROJ 文件中的以下条目:

    XML

    <ItemGroup>
        <Content Remove="<image file name>" />
    </ItemGroup>
    <ItemGroup>
        <PRIResource Remove="<resw file name>" />
    </ItemGroup>
    
  • 对于未打包的 C++ WinUI 应用程序,资源 URI 未正确构建。 要解决此问题,请在 vcxproj 中添加以下内容:

    XML

    <!-- Add the following after <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> -->
    
    <PropertyGroup>
        <AppxPriInitialPath></AppxPriInitialPath>   
    </PropertyGroup>
    

部署

新功能和更新

  • 您可以通过 WindowsPackageType project 属性以加载 Windows App SDK 运行时并调用 Windows App SDK API。 看 创建 WinUI 3 应用程序 作为指示。
  • 未打包的应用程序可以通过集成到独立的 Windows App SDK 中来部署 Windows App SDK .exe 安装程序到您现有的 MSI 或安装程序。 有关详细信息,请参阅 适用于未打包应用的 Windows 应用 SDK 部署指南.
  • 未打包的 .NET 应用程序也可以使用 .NET 包装器 引导程序 API 在运行时动态获取对 Windows App SDK 框架包的依赖。 有关 .NET 包装器的详细信息,请参阅 .NET 包装库.
  • 打包的应用程序可以使用部署 API 来验证并确保机器上安装了所有必需的包。 有关部署 API 如何工作的详细信息,请参阅 打包应用部署指南.

重要限制

  • 引导程序 API 的 .NET 包装器仅供未打包的 .NET 应用程序使用,以简化对 Windows App SDK 的访问。
  • 仅 MSIX 打包的应用程序完全受信任或具有 包管理 受限能力有权使用部署 API 安装主包和单例包依赖项。 对部分信任打包应用程序的支持将在以后的版本中提供。
  • 当 F5 测试使用 部署管理器.初始化 x64 系统上的方法,确保首先通过运行 Windows应用程序运行时安装.exe. 否则你会遇到一个 未找到 由于 Visual Studio 未部署 x64 框架而导致的错误,这通常通过商店部署或旁加载发生。

其他限制和已知问题

  • 不支持任何 CPU 构建配置:什么时候 添加 Windows 应用 SDK 到支持的现有 .NET 应用程序或组件 任何 CPU,您必须指定所需的架构: x86x64 or arm64.
  • 从 .NET 5 升级到 .NET 6:在 Visual Studio UI 中升级时,您可能会遇到构建错误。 作为一种解决方法,手动将项目文件的 TargetFrameworkPackage 更新为以下内容:

    XML

        <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework> 
    
  • 如果未安装 C++ UWP 工具,则 C# 单项目 MSIX 应用程序不会编译。 如果您有 C# 单项目 MSIX 项目,则需要安装 C++ (v14x) 通用 Windows 平台工具 可选组件。
  • 安装多个版本的 Visual Studio 2019 时,后续语言 VSIX 无法安装到 Visual Studio 2019。 如果您安装了多个版本的 Visual Studio 2019(例如 Release 和 Preview),然后安装适用于 C++ 的 Windows App SDK VSIX  C#,第二次安装会失败。 要解决此问题,请在第一种语言 VSIX 之后卸载适用于 Visual Studio 2019 的单项目 MSIX 打包工具。 看法 这个反馈 有关此问题的更多信息。
  • 如果您想 co_await 在 DispatcherQueue.TryEnqueue 方法,然后使用 恢复前景 中的辅助函数 Windows 实现库 (WIL):
    1. 添加引用 Microsoft.Windows.ImplementationLibrary NuGet 包。
    2. 添加 #include <wil/cppwinrt_helpers.h> 声明到您的代码文件。
    3. 使用 wil::resume_foreground(your_dispatcher); 至 co_await 结果。

阅读更多信息并在 Microsoft 找到下载链接 此处.

有关主题的更多信息: Windows 应用 SDK 1.0.0, 维努伊 3

发表评论

您的电邮地址不会被公开。 必填带 *