PC Health Check
Windows 电脑健康状况检查

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

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

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

WindowsAppSDK 1.0 稳定

用户界面 3

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

新功能和更新

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

重要限制

  • 打包和未打包 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 之前缺少打包和发布菜单项: 在 Visual Studio 2019 和 Visual Studio 2022 中使用空白应用程序、打包(桌面中的 WinUI 3)项目模板创建具有单项目 MSIX 的新应用程序时,发布命令在您关闭并重新打开 Visual Studio 之前,该项目不会出现在菜单中。
    • 如果没有安装“C++ (v14x) 通用 Windows 平台工具”可选组件,带有单项目 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 包。
    • 要使用该Pack 命令从 C# 类库创建 NuGet 包 ,请确保活动 Configuration 为 Release.
    • Pack C++ Windows 运行时组件不支持该 命令来创建 NuGet 包。

开窗

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静态工厂函数:  GetCurrentPoint、  GetCurrentPointTransformed、  GetIntermediatePoints和 GetIntermediatePointsTransformed
  • Windows 应用 SDK 不支持 使用指针 ID检索 PointerPoint对象。相反,您可以使用 PointerPoint 成员函数 GetTransformedPoint 来检索现有PointerPoint 对象的转换版本 。对于中间点,您可以使用 PointerEventArgs 成员函数 GetIntermediatePoints 和 GetTransformedIntermediatePoints
  • 直接使用平台 SDK API  Windows.UI.Core.CoreDragOperation 将不适用于 WinUI 应用程序。
  • PointerPoint 属性 RawPosition 和 ContactRectRaw 被删除,因为它们引用了非预测值,这些值与操作系统中的正常值相同。请改用 Position 和 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
  • 注册/注销丰富的激活
    • 未打包的应用程序:完全可用。
    • 打包的应用程序:不可用,请改用应用程序的 MSIX 清单。
    • 有关详细信息,请参阅 丰富的激活
  • 单/多实例
    • 未打包的应用程序:完全可用。
    • 打包的应用程序:完全可用。
    • WinUI 应用程序:如果应用程序想要检测其他实例并重定向激活,则必须尽早在初始化任何窗口等之前这样做。要启用此功能,应用程序必须定义 DISABLE_XAML_GENERATED_MAIN,并编写自定义 Main (C# ) 或 WinMain (C++),它可以在其中进行检测和重定向。
    • RedirectActivationToAsync 是一个异步调用,如果您的应用在 STA 中运行,则不应等待异步调用。对于 Windows 窗体和 C# WinUI 应用程序,如有必要,您可以将 Main 声明为异步。对于 C++ WinUI 和 C# WPF 应用程序,您不能将 Main 声明为异步,因此您需要将重定向调用移动到另一个线程以确保不会阻塞 STA。
    • 有关更多信息,请参阅 应用实例化
  • 电源/状态通知
    • 未打包的应用程序:完全可用。
    • 打包的应用程序:完全可用。
    • 有关详细信息,请参阅 电源管理

已知问题

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

写核心

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

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

重要限制

  • DWriteCore 不包含以下 DirectWrite 功能:
    • 每会话字体
    • 最终用户定义的字符 (EUDC) 字体
    • 字体流 API
  • 低级渲染 API 支持是部分的。
  • DWriteCore 不与 Direct2D 互操作,但您可以使用 IDWriteGlyphRunAnalysis 和 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 运行时并调用 Windows App SDK API。有关 说明,请参阅 创建 WinUI 3 应用程序
  • 未打包的应用程序可以通过将独立的 Windows 应用程序 SDK.exe 安装程序集成到您现有的 MSI 或安装程序中来部署 Windows 应用程序 SDK  。有关详细信息,请参阅 未打包应用的 Windows 应用 SDK 部署教程
  • 未打包的 .NET 应用程序还可以使用 .NET 包装器进行 引导程序 API, 以便在运行时动态依赖 Windows 应用程序 SDK 框架包。有关 .NET 包装器的详细信息,请参阅 .NET 包装器库
  • 打包的应用程序可以使用部署 API 来验证并确保机器上安装了所有必需的包。有关部署 API 如何工作的详细信息,请参阅打包应用程序的 部署教程

重要限制

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

其他限制和已知问题

  • 不支持 Any CPU 构建配置: 将 Windows 应用 SDK 添加 到支持Any CPU的现有 .NET 应用程序或组件时 ,您必须指定所需的体系结构:  x86、 x64 或 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++和 C#安装了 Windows App SDK VSIX  ,则第二次安装将失败。若要解决,请在第一种语言 VSIX 之后卸载 Visual Studio 2019 的单项目 MSIX 打包工具。查看 此反馈 以获取有关此问题的其他信息。
  • 如果你想 co_await 在 DispatcherQueue.TryEnqueue 方法,然后使用 resume_foreground 在辅助函数 的Windows实现库(WIL) 
    1. 添加对Microsoft.Windows.ImplementationLibrary  NuGet 包的引用 。
    2. 将该#include <wil/cppwinrt_helpers.h> 语句添加 到您的代码文件中。
    3. 使用 wil::resume_foreground(your_dispatcher); 到 co_await 的结果。

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

赞(1) 打赏
未经允许不得转载:PC Health Check » Microsoft Windows App SDK 1.0 Stable 发布,可供下载(发行说明)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏