默认情况下,Windows 应用 SDK 项目依赖于框架。 若要切换到自包含部署,请遵循以下步骤(术语 依赖于框架和 自包含 的定义详见 Windows App SDK 部署概述)。
- 在 Visual Studio 中,右键单击应用项目节点,然后单击 “编辑项目文件 ”以打开应用项目文件进行编辑。 对于C++项目,首先单击 卸载项目。
- 在应用项目文件中的 main
PropertyGroup
中,添加<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
如下屏幕截图所示。
- 保存并关闭项目文件。
- 单击 重载项目。
- 如果你使用的是 Windows 应用程序打包项目(而不是通过 空白应用、打包(桌面中的 WinUI 3)获得的单项目 MSIX),那么也请在打包项目的项目文件中进行上述所有更改。
注释
不应更改库项目。 仅应在应用程序项目中配置独立部署,并且在适用的情况下,在 Windows 应用程序打包项目中配置。
有关示例应用,请参阅 Windows 应用 SDK 独立部署示例。
将 WindowsAppSDKSelfContained
属性设置为项目文件中 true
后,Windows App SDK Framework 包的内容将提取到生成输出,并部署为应用程序的一部分。
注释
.NET 应用需要 发布为自包含,以及完全独立。 有关如何配置 .NET 自包含的发布配置文件,请参阅此示例 。
dotnet publish
还未支持 Windows 应用 SDK 1.1。
注释
C++应用需要使用 混合 CRT,才能完全独立。 从 Directory.Build.props 导入 HybridCRT.props 是将其配置为适用于解决方案中所有项目的推荐方法(请参阅 Directory.Build.props中的一个示例)。 打包的应用还必须在其项目文件中设置 <UseCrtSDKReferenceStaticWarning>false</UseCrtSDKReferenceStaticWarning>
。 要了解如何使用混合CRT,请参阅独立部署示例应用程序。
如果应用打包(有关详细信息,请参阅 部署概述),则 Windows 应用 SDK 依赖项将作为 MSIX 包中的内容包含在内。 部署应用仍需要像注册任何其他打包的应用一样注册 MSIX 包。
如果你的应用程序使用外部位置打包或未打包,则 Windows 应用 SDK 依赖项会被复制到生成输出中的 .exe
旁边。 可以将生成的文件通过 xcopy 部署,或者将其包含在自定义安装程序中。
对附加 MSIX 包的依赖
Windows 应用 SDK 中的少量 API 依赖于表示关键作系统(OS)功能的其他 MSIX 包。
- 例如(从 Windows 应用 SDK 1.1 起),推送通知 API(PushNotificationManager)和应用通知 API(AppNotificationManager)依赖于 单一实例 包(请参阅 Windows 应用 SDK 的部署体系结构)。
这意味着,如果要在独立应用中使用这些 API,则可以使用以下选项:
- 你可以使你的功能成为可选功能, 并仅在可能的情况下将其亮起。 调用 API 的 IsSupported 方法(PushNotificationManager.IsSupported 和 AppNotificationManager.IsSupported)可让你在运行时动态检查 API 是否可用于运行它的系统上的调用应用。
- 这样就可以安全、有条件、有条件地使用 API,而不会影响独立部署的简单性。
- 仅当 OS 服务安装在应用部署外部时,应用才会亮起相应的功能。 但事实上,在某些情况下,即使不存在 Singleton 包,API 也能正常工作;因此,调用 IsSupported 检查通常是个好主意。
- 在应用安装过程中部署所需的 MSIX 包。
- 这使您能够在所有场景中依赖 API。 但是,要求将依赖项作为应用部署的一部分进行 MSIX 包部署可能会损害独立部署的简单性。
- 请勿使用 API。
- 请考虑提供类似功能的替代 API,而无需其他部署要求。
选择退出(或加入)自动 UndockedRegFreeWinRT 支持
项目属性 WindowsAppSdkUndockedRegFreeWinRTInitialize 是在 Windows 应用 SDK 的 1.2 版本(稳定通道)中引入的。 如果该属性设置为 true 则可确保在应用启动时自动启用 Windows 应用 SDK 实现无注册的 Windows 运行时(UndockedRegFreeWinRT)。 未打包的自包含应用需要这种支持。
WindowsAppSdkUndockedRegFreeWinRTInitialize 默认为 true ,如果 WindowsAppSDKSelfContained 为 true 且 WindowsPackageType 为 None,并且(从 Windows 应用 SDK 版本 1.2 起)OutputType 项目属性被设置为 Exe 或 WinExe (也就是说,项目生成可执行文件)。 最后一个条件是为了防止默认情况下在类库 DLL 和其他非可执行文件中添加自动 UndockedRegFreeWinRT 支持。 如果 非可执行文件中需要自动 UndockedRegFreeWinRT 支持(例如,由不初始化 UndockedRegFreeWinRT 的主机进程可执行文件加载的测试 DLL),则可以使用 <WindowsAppSdkUndockedRegFreeWinRTInitialize>true</WindowsAppSdkUndockedRegFreeWinRTInitialize>
在项目中显式启用它。