本文提供有关部署依赖框架的打包应用程序(请参阅 什么是 MSIX?)的指导。 其他依赖于框架的打包选项的对应主题是Windows App SDK 部署指南,适用于使用外部位置打包或未打包的依赖框架应用。
Overview
默认情况下,在 Visual Studio 中使用 WinUI 3 模板 创建项目时,项目被配置为将应用构建成 MSIX 包,可以使用单项目 MSIX(请参阅 使用单项目 MSIX 打包应用)或 Windows 应用程序打包项目(请参阅 在 Visual Studio 中设置桌面应用程序以用于 MSIX 打包)。 然后,您可以按照 在 Visual Studio 中打包桌面应用或 UWP 应用 中的说明,为您的应用生成 MSIX 包。 为应用生成 MSIX 包后,可以使用多个选项 来管理 MSIX 部署。
若要详细了解打包应用在使用Windows App SDK时可能需要的包,请参阅
Prerequisites
- 对于打包的应用,VCLibs 框架包依赖项是必需的。 有关详细信息,请参阅 适用于桌面桥的C++运行时框架包。
- C#. .NET 6 或更高版本是必需的。 有关详细信息,请参阅 .NET Downloads。
部署Windows App SDK框架包
Windows App SDK框架包包含运行时使用的Windows App SDK二进制文件,并随应用程序一起安装。 框架对Windows App SDK的不同通道有不同的部署要求。
稳定版本
在开发计算机上安装 Windows App SDK NuGet 包的稳定版本时,使用提供的 WinUI 项目模板之一创建项目时,生成的包清单包含一个 PackageDependency 元素,该元素指定了框架包的依赖项。
但是,如果使用单独的Windows应用程序打包项目手动生成应用包,则必须在 文件中声明 Application (package).wapproj,如下所示:
<ItemGroup>
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.8.260209005">
<IncludeAssets>build</IncludeAssets>
</PackageReference>
</ItemGroup>
该包依赖项可确保将应用部署到另一台计算机时安装框架包。
预览版
在开发计算机上安装 Windows App SDK NuGet 包的预览版本时,会在生成期间将 Windows App SDK 框架包的预览版本部署为 NuGet 包依赖项。
调用部署 API
另请参阅 Initialize Windows App SDK。
部署 API 由 Windows App SDK 框架包提供,可在 Microsoft.Windows 中使用。ApplicationModel.WindowsAppRuntime 命名空间。 Windows应用程序模型不支持声明对 Main 和 Singleton 包的依赖项。 因此,出于以下原因,需要部署 API:
- 为框架包中没有的功能(例如推送通知)部署 Singleton 包。
- 若要部署 Main 包,该包允许从 Microsoft 应用商店自动更新框架包。
对于 未 通过应用商店分发的打包应用,开发人员负责分发框架包。 建议调用部署 API,以便传递任何关键服务更新。 请注意,若要使用框架包外部的功能(例如推送通知),必须部署 Singleton 包(这可以通过部署 API 完成,或者通过使用你自己的安装方法重新分发 MSIX 包)。
Important
只有完全信任或具有 packageManagement 受限功能的打包应用才有权使用部署 API 安装 Main 和 Singleton 包依赖项。
应在应用进程初始化后调用部署 API,但在应用使用使用 Singleton 程序包(例如推送通知)的 Windows App SDK 运行时功能之前。 部署 API 的主要方法是 DeploymentManager 类的静态 GetStatus 和 Initialize 方法。
- GetStatus 方法返回当前加载的Windows App SDK运行时的当前部署状态。 使用此方法确定在当前应用可以使用Windows App SDK功能之前,是否需要安装Windows App SDK运行时包。
- Initialize 方法验证当前加载的 Windows App SDK 运行时所需的最低版本是否包含所有必需的包。 如果缺少任何包依赖项,该方法将尝试注册缺少的包。 从 Windows App SDK 1.1 开始,Initialize 方法还支持强制部署Windows App SDK运行时包的选项。 这会关闭 Main 和 Singleton 运行时包的任何进程,从而中断其服务(例如,推送通知在此期间不会传递通知)。 应仅调用 Initialize 一次。 无需为通过 Start Without Debugging 和 Start Debugging 命令在 Visual Studio 中部署的应用调用 Initialize。
Important
Visual Studio属性<WindowsAppSdkDeploymentManagerInitialize>的默认值为 true。 因此,如果要显式调用 DeploymentManager.Initialize,请在Visual Studio项目文件中设置 <WindowsAppSdkDeploymentManagerInitialize>false</WindowsAppSdkDeploymentManagerInitialize>。
部署 API 示例应用
有关如何使用 DeploymentManager 类的 GetStatus 和 Initialize 方法的其他指南,请浏览可用的示例应用。
地址安装错误
如果在安装Windows App SDK运行时包期间部署 API 遇到错误,它将返回描述问题的错误代码。
例如,如果应用不完全信任,或者没有 packageManagement 受限功能,则会收到 ACCESS_DENIED 错误代码。 若要查看可能会遇到的其他错误代码及其可能的原因,请参阅Windows 应用程序的打包、部署和查询故障排除。
如果错误代码不提供足够的信息,则可以在详细的事件日志中找到更多诊断信息(请参阅 获取诊断信息)。
如果遇到无法诊断的错误,请在 WindowsAppSDK GitHub 存储库中提交问题错误代码和事件日志,以便我们可以调查该问题。