教程 - 在使用Windows 应用 SDK的非 MSIX 打包应用中使用引导程序 API
本文介绍如何配置未通过 MSIX 部署的应用 (非 MSIX 打包) 以使用引导程序 API,以便显式加载Windows 应用 SDK运行时,并调用Windows 应用 SDK API。 非 MSIX 打包的应用包括稀疏打包或未打包的应用。
[注意]从 Windows 应用 SDK 1.0 预览版 3 开始,从非 MSIX 打包的应用加载Windows 应用 SDK的默认方法是通过
<WindowsPackageType>None</WindowsPackageType>
项目属性使用自动初始化。 在 创建第一个 WinUI 3 项目中演示了此方法。如果你有高级需求 ((例如自定义错误处理)或加载特定版本的Windows 应用 SDK) ,则可以改为显式调用引导程序 API。 这就是本主题演示的方法。 有关详细信息,请参阅对非 MSIX 打包的应用使用Windows 应用 SDK运行时。
本主题演示如何从基本控制台应用项目显式调用引导程序 API;但这些步骤适用于使用Windows 应用 SDK的任何未打包桌面应用。
在完成本教程之前,建议查看运行时体系结构,了解有关应用使用Windows 应用 SDK时所使用的框架包依赖项的详细信息,以及在非 MSIX 打包 (非 MSIX 打包) 应用中工作所需的附加组件。
先决条件
- 安装适用于 Windows 应用 SDK 的工具。
- 确保 (安装非 MSIX 打包应用的所有依赖项Windows 应用 SDK部署指南,了解依赖于框架的非 MSIX 打包应用) 。 执行此操作的一种简单方法是运行Windows 应用 SDK运行时安装程序。
Instructions
可以使用 C# 或 C++ 项目遵循本教程。
注意
提升的进程调用时,动态依赖项和引导程序 API 会失败。 因此,不应提升Visual Studio。 有关更多详细信息,请参阅 动态依赖项不支持提升 #567 。
按照这些说明配置非 MSIX 打包的 C# WinUI 3 项目。
在 Visual Studio 中,创建新的 C# 控制台应用程序项目。 将项目命名为“DynamicDependenciesTest”。
接下来,配置项目。
在“解决方案资源管理器”中,右击项目,然后选择“编辑项目文件”。
将 TargetFramework 元素的值替换为目标框架名字对象。 例如,如果应用目标是 Windows 10 版本 2004,请使用以下项。
<TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
保存并关闭项目文件。
将解决方案的平台更改为 x64。 .NET 项目中的默认值为 AnyCPU,但 WinUI 3 不支持该平台。
- 选择“生成”>“配置管理器”。
- 选择“活动解决方案平台”下的下拉列表,单击“新建”选项以打开“新建解决方案平台”对话框。
- 在“键入或选择新平台”下的下拉菜单中,选择“x64”。
- 选择“确定”以关闭“新建解决方案平台”对话框。
- 在“配置管理器”中,单击“关闭”。
在项目中安装 Windows 应用 SDK NuGet 包。
- 在“解决方案资源管理器”中,右键单击“依赖项”节点,然后选择“管理 NuGet 包”。
- 在NuGet 程序包管理器窗口中,选择“浏览”选项卡,并安装 Microsoft.WindowsAppSDK 包。
现在,可以使用引导程序 API 动态依赖Windows 应用 SDK框架包。 这使你能够在应用中使用 Windows 应用 SDK API。
打开 Program.cs 代码文件,将默认代码替换为以下代码。
using System; using Microsoft.Windows.ApplicationModel.DynamicDependency; namespace DynamicDependenciesTest { class Program { static void Main(string[] args) { Bootstrap.Initialize(0x00010000); Console.WriteLine("Hello, World!"); // Release the DDLM and clean up. Bootstrap.Shutdown(); } } }
引导程序 API 是一个本机 C/C++ API,可让你在应用中使用 Windows 应用 SDK API。 在使用 Windows 应用 SDK 1.0 预览版 3 或更高版本的 .NET 应用中,可以将 .NET 包装器用于引导程序 API。 与直接调用本机 C/C++ 函数相比,此包装器提供了一种更简单的方法来调用 .NET 应用中的引导程序 API。 前面的代码示例为引导程序 API 调用 .NET 包装器中 Bootstrap 类的静态 Initialize 和 Shutdown 方法。
为了演示已正确加载 Windows 应用 SDK 运行时组件,请添加一些使用 Windows 应用 SDK 中的 ResourceManager 类加载字符串资源的代码。
向项目添加新的资源文件 (.resw)。
在编辑器中打开资源文件后,使用以下属性创建新的字符串资源。
- 名称:消息
- 值: 你好,世界!
保存资源文件。
打开 Program.cs 代码文件,将以下语句添加到文件顶部:
using Microsoft.Windows.ApplicationModel.Resources;
请使用以下代码替换
Console.WriteLine("Hello, World!");
行。// Create a resource manager using the resource index generated during build. var manager = new Microsoft.ApplicationModel.Resources.ResourceManager("DynamicDependenciesTest.pri"); // Lookup a string in the RESW file using its name. Console.WriteLine(manager.MainResourceMap.GetValue("Resources/Message").ValueAsString);
按 F5 生成并运行应用程序。 应会看到字符串
Hello, World!
已成功显示。