通过


教程:在打包到外部位置的应用中使用捆绑器 API,或者在使用 Windows 应用 SDK 的未打包应用中使用它。

本文介绍如何配置未通过 MSIX 安装的应用(即打包在外部位置或未打包),以使用引导程序 API,从而显式加载 Windows App SDK 运行时,并调用 Windows App SDK API。 未通过 MSIX 安装的应用包括被打包到外部位置的应用和未打包的应用。

重要

从 Windows App SDK 1.0 开始,从使用外部位置或未打包的应用打包Windows App SDK的默认方法是通过 project 属性(以及进行其他配置更改)使用 <WindowsPackageType>。 有关 WinUI 3 项目上下文中自动初始化所涉及的步骤,请参阅 创建您的第一个 WinUI 项目。 或者,如果现有项目不是 WinUI,请参阅 在现有项目中使用 Windows App SDK

如果你有高级需求(例如自定义错误处理或加载特定版本的Windows App SDK),则可以改为显式调用引导程序 API。 这就是本主题演示的方法。 此外,有关详细信息,请参阅 为打包至外部位置或未打包的应用使用 Windows App SDK 运行时

本主题演示如何从基本控制台应用project显式调用引导程序 API,但这些步骤适用于使用Windows App SDK的任何未打包的桌面应用。

在完成本教程之前,我们建议您查看运行时架构,以更多了解您的应用在使用Windows应用SDK时,它所依赖的Framework包,以及应用在以外部位置打包或未打包时所需的附加组件。

先决条件

  1. 用于 Windows App SDK 的安装工具。
  2. 确保为使用外部位置的打包应用以及未打包应用安装所有依赖项(请参阅 Windows App SDK 部署指南,了解依赖于框架的打包至外部位置或未打包的应用程序)。 运行Windows应用程序SDK运行时安装程序是一个简单的方法。

说明

可以使用 C# 或 C++ project遵循本教程。

注意

动态依赖项和引导程序 API 在由具有提升权限的进程调用时会出现故障。 因此,不应以管理员权限运行Visual Studio。 有关详细信息,请参阅 Dynamic Dependencies 不支持权限提升 #567

按照以下说明配置 C# WinUI 项目,该项目可以打包存储在外部位置,也可以不打包。

  1. 在 Visual Studio 中,创建新的 C# Console App project。 将 project DynamicDependenciesTest 命名。 创建项目后,您应该有一个“Hello,World!”的C#控制台应用程序。

  2. 接下来,配置您的项目。

    1. Solution Explorer 中,右键单击project并选择 Edit Project File
    2. TargetFramework 元素的值替换为目标框架标识符。 例如,如果你的应用面向版本 2004 Windows 10,请使用以下内容。
    <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
    
    1. 保存并关闭项目文件。
  3. 将解决方案的平台更改为 x64。 .NET project中的默认值为 AnyCPU,但 WinUI 不支持该平台。

    1. 选择 Build>Configuration Manager
    2. 选择“活动解决方案平台”下的下拉列表,单击“新建”选项以打开“新建解决方案平台”对话框。
    3. 在“键入或选择新平台”下的下拉菜单中,选择“x64”
    4. 选择“确定”以关闭“新建解决方案平台”对话框。
    5. Configuration Manager 中,单击 Close
  4. 在project中安装 Windows App SDK NuGet 包。

    1. Solution Explorer 中,右键单击 Dependencies 节点,然后选择 Manage Nuget Packages
    2. NuGet Package Manager 窗口中,选择 Browse 选项卡,然后安装 Microsoft.WindowsAppSDK 包。
  5. 现在,您已准备好使用引导程序 API(请参阅 将 Windows 应用 SDK 运行时用于打包到外部位置的应用或未打包的应用),以动态依赖 Windows 应用 SDK 框架包。 这样,便可以在应用中使用Windows App SDK API。

    打开Program.cs代码文件,并将默认代码替换为以下代码,以调用 Bootstrap.Initialize 方法来初始化引导程序。 此代码定义初始化引导程序时应用所依赖的Windows App SDK版本。

    重要

    需要编辑以下代码,以适应特定配置。 请参阅 Bootstrap.Initialize 方法的参数的说明,以便可以指定已安装的Windows App SDK版本之一。

    using System;
    using Microsoft.Windows.ApplicationModel.DynamicDependency;
    
    namespace DynamicDependenciesTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                Bootstrap.Initialize(0x00010002);
                Console.WriteLine("Hello, World!");
    
                // Release the DDLM and clean up.
                Bootstrap.Shutdown();
            }
        }
    }
    

    引导程序接口本质上是一个本机 C/C++ API,支持你在应用中使用 Windows App SDK 的 API。 但在使用 Windows App SDK 1.0 或更高版本的 .NET 应用中,可以使用引导程序 API 的 .NET 包装器。 该封装器提供了一种在 .NET 应用中更简便地调用引导程序 API 的方法,而不必直接调用本机 C/C++ 函数。 前面的代码示例调用了引导程序 API 的 .NET 封装器中 Bootstrap 类的静态方法 InitializeShutdown

  6. 为了演示如何正确加载Windows App SDK运行时组件,请添加一些代码,这些代码使用 Windows App SDK 中的 ResourceManager 类来加载字符串资源。

    1. 将新的 资源文件(.resw)添加到项目中(保留默认名称)。

    2. 在编辑器中打开资源文件后,使用以下属性创建新的字符串资源。

      • 名称:消息
      • 值:Hello, resources!
    3. 保存资源文件。

    4. 打开 Program.cs 代码文件,并将行 Console.WriteLine("Hello, World!"); 替换为以下代码。

    // Create a resource manager using the resource index generated during build.
       var manager = new Microsoft.Windows.ApplicationModel.Resources.ResourceManager("DynamicDependenciesTest.pri");
    
    // Look up a string in the .resw file using its name.
    Console.WriteLine(manager.MainResourceMap.GetValue("Resources/Message").ValueAsString);
    
    1. 单击“启动而不调试”(或“开始调试”)生成并运行你的应用。 应会看到字符串 Hello, resources! 已成功显示。

如果你的项目为WPF

有关 Windows Presentation Foundation (WPF) 应用,请参阅 在 WPF 应用中使用Windows App SDK