详细信息
- 按正常方式开发你的应用,引用所需可再发行组件的导出库。
- 无需将所依赖的可再发行组件与应用打包在一起,而是在清单中声明对相关框架包的依赖。
- 当用户从 Microsoft Store 安装你的应用时,系统会检测该依赖,并确保该框架包对应用可用。 如果框架包已经安装在用户的设备上,则不需要进一步操作。否则,Microsoft Store 会在继续安装引用该框架包的应用之前,先触发该框架包的安装。
- x86 版本的应用使用 x86 版本的框架包,x64 版本的应用使用 x64 版本的框架包。你无需为指定架构做任何事情,平台会为你处理。
DirectX 运行时
此框架包提供来自旧版 DirectX SDK 的多个并存(side-by-side)的可选组件。如果你的应用使用了已弃用的 Direct3D 实用库 D3DX9、D3DX10 或 D3DX11,或者 XAudio 2.7、XInput 1.3 或 XACT,那么可以使用此包为你打包的 Win32 桌面应用部署这些已弃用的 DLL。有关这些组件的更多背景,请参见 此博客文章。使用 DirectX 的绝大多数游戏 并不 真正需要这个“旧版 DirectX SDK”框架包依赖。
- 对于 XAudio2,最佳选择是使用 Windows 10 SDK 中的头文件升级到 XAudio 2.9。在 Windows 10 中,XAudio 2.9、X3DAudio 和 XAPOFX 都已内置于操作系统中。对于你的非 Store 版本,可以使用 XAudio2Redist,它提供了一个简单的应用本地可再发行组件,支持在 Windows 7 SP1 或更高版本上使用 XAudio2.9。这既简化了部署,又解决了旧版 XAudio 2.7 的许多已知 Bug。请参见 Microsoft Docs。
- 对于 XInput,最佳选择是使用 Windows 10 SDK 中的头文件使用 XInput 1.4。在 Windows 10 中,XInput 1.4 已内置于操作系统中。对于你的非 Store 版本,可以使用 XInput 9.1.0,它一路向下兼容至 Windows Vista,内置于操作系统中。请参见 此博客文章。
强烈不建议使用旧版 XInput 1.3,因为它存在已知的安全问题。框架包中的版本已更新以缓解此问题并升级到 SHA-256 代码签名,但原始的旧版 DirectX End-User Runtime 包未做更改。
-
对于 Direct3D 10(
d3dx10),最佳选择是升级到 Direct3D 11。请参见 Microsoft Docs。 -
对于 Direct3D 11(
d3dx11),关于替代旧版 D3DX for Direct3D 11 的各种方案,请参见 此博客文章。
对于较旧的游戏,你还可以考虑使用 Microsoft.DXSDK.D3DX NuGet 包,它提供了 D3DX9、D3DX10 和 D3DX11 的 2010 年 6 月版本,并采用并存许可证。这些可再发行 DLL 同样使用 SHA-256 代码签名。
- 对于 HLSL 编译器(
D3DCompiler),你可以使用 Windows 10 SDK 中的最新版本。在 Windows 10 中,它内置于操作系统中。对于你的非 Store 版本,可以将D3DCompiler_47.dll作为简单的应用本地文件与游戏一起包含。请参见 此博客文章。
此框架包和旧版 DirectX End-User Redistributable 均不会以任何方式修改 DirectX 运行时。
MicrosoftGame.config 示例片段:
- 从 Microsoft Downloads 站点下载,双击 Appx 文件安装(推荐)。DirectX x86 框架包,DirectX x64 框架包
- 在“运行”应用中输入以下链接,以获取一个安装 DirectX 框架依赖包的 DirectX 示例应用。(注意:这仅适用于位于 RETAIL 开发沙箱中的机器,并且只会在 x64 平台的机器上安装 x64 平台版本):ms-windows-store://pdp/?productid=9MTF6XHMN17Z
DirectX 框架包不会将这些 DLL 安装到 System32 文件夹中。它们位于你已打包应用运行时的搜索路径中。如果你在使用显式链接,请不要使用
LoadLibraryEx 的 LOAD_LIBRARY_SEARCH_SYSTEM32 或 LOAD_LIBRARY_SEARCH_APPLICATION_DIR 标志来加载这些旧版 DirectX 库。此框架包的 9.29.1974.0 版本包括 SHA-256 代码签名的载荷 DLL,以及针对 XInput 1.3 的安全修复。
Visual Studio C++ 运行时
对于 C/C++ 运行时这一特殊情况,传统的可再发行形式和框架包形式并不总是完全相同。传统的非 Microsoft Store 应用一直使用传统的可再发行形式。
上文提到的安装程序会将必要的框架包放置在以下 Extension SDKs 文件夹中:
%PROGRAMFILES(X86)%\Microsoft SDKs\Windows Kits\10\ExtensionSDKs
请确保侧载与你的应用架构相对应的版本:x86 或 x64。
要在本地测试你的包及其框架依赖项,请确定你的应用是使用哪个版本的 Visual Studio 构建的,侧载对应的 APPX 框架包,然后注册你的应用。
有关详细信息,请参见 Microsoft Docs。
Visual Studio 2012
以下是 Visual Studio 2012 VCLibs 框架包 v11 的清单示例条目。-
x86:
- 定位框架包: C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.110\14.0\Appx\Retail\x86\Microsoft.VCLibs.x86.11.00.Desktop.appx
-
双击安装,或运行以下 Windows PowerShell 命令:
add-appxpackage "C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.110\14.0\Appx\Retail\x86\Microsoft.VCLibs.x86.11.00.Desktop.appx"
-
x64:
- 定位框架包: C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.110\14.0\Appx\Retail\x64\Microsoft.VCLibs.x64.11.00.Desktop.appx
-
双击安装,或运行以下 Windows PowerShell 命令:
add-appxpackage "C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.110\14.0\Appx\Retail\x64\Microsoft.VCLibs.x64.11.00.Desktop.appx"
Visual Studio 2013
以下是 Visual Studio 2012 VCLibs 框架包 v12 的清单示例条目。-
x86:
- 定位框架包: C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.120\14.0\Appx\Retail\x86\Microsoft.VCLibs.x86.12.00.Desktop.appx
-
双击安装,或运行以下 Windows PowerShell 命令:
add-appxpackage "C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.110\14.0\Appx\Retail\x86\Microsoft.VCLibs.x86.11.00.Desktop.appx"
-
x64:
- 定位框架包: C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.120\14.0\Appx\Retail\x64\Microsoft.VCLibs.x64.12.00.Desktop.appx
-
双击安装,或运行以下 Windows PowerShell 命令:
add-appxpackage "C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.120\14.0\Appx\Retail\x64\Microsoft.VCLibs.x64.12.00.Desktop.appx"
Visual Studio 2015 - 2022
以下是 Visual Studio 2015 或更高版本 VCLibs 框架包 v14 的清单示例条目。-
x86:
- 定位框架包: C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop\14.0\Appx\Retail\x86\Microsoft.VCLibs.x86.14.00.Desktop.appx
-
双击安装,或运行以下 Windows PowerShell 命令:
add-appxpackage "C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop\14.0\Appx\Retail\x86\Microsoft.VCLibs.x86.14.00.Desktop.appx"
-
x64:
- 定位框架包: C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop\14.0\Appx\Retail\x64\Microsoft.VCLibs.x64.14.00.Desktop.appx
-
双击安装,或运行以下 Windows PowerShell 命令:
add-appxpackage "C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop\14.0\Appx\Retail\x64\Microsoft.VCLibs.x64.14.00.Desktop.appx"
本地测试
在包含对相应清单的引用并侧载了 APPX 框架包后,使用以下命令安装应用的松散构建版本:WdApp.exe register loose_build_path
这将确保你的应用被安装并引用正确的框架。现在从“开始”菜单的磁贴运行你的应用,然后针对你的应用执行必要的测试和验证步骤。
在完成侧载配置下的测试后,使用 使用 MSIXVC 打包工具在 PC 上打包游戏入门 主题中的说明创建 MSIXVC 包。
有关更多详细信息,请参见博客文章
Using Visual C++ Runtime in Centennial project。