框架包依赖项

如果应用一直依赖于 Microsoft Store 中以框架包形式提供的某些可再发行软件,则不会链式安装可再发行文件,您可以声明框架包的依赖项。 但是,如果 Microsoft Store 没有可用于依赖性可再发行文件的框架包,则不要使用上述方式。 而是考虑自定义安装操作。

详细信息

  • 通过引用所需可再发行文件的导出库,可以通过正常方式开发应用。

  • 不是将依赖性可再发行文件与应用捆绑,而是更新清单以声明相关框架包的依赖项。

  • 当用户从 Microsoft Store 安装应用时,它会检测依赖关系,并确保框架包可用于应用。

    如果用户的设备上已安装框架包,则不需要进一步的操作。 否则,在继续安装使用框架包的应用之前,Microsoft Store 会触发框架包的安装。

  • 应用的 x86 内部版本将使用框架包的 x86 内部版本。 应用的 x64 内部版本将使用框架包的 x64 内部版本。 您无需执行任何操作即可指定体系结构。 平台负责此事宜。

DirectX 运行时

此框架包提供了旧版 DirectX SDK 中各种不同的并排可选组件。 如果您的应用程序使用的是已弃用的 Direct3D 实用工具库 D3DX9、D3DX10 或 D3DX11、XAudio 2.7、XInput 1.3 或 XACT,则可以使用此包为您打包的 Win32 桌面应用程序部署那些已弃用的 DLL。 有关这些组件的更多背景信息,请参阅 此博客文章

注意

大多数使用 DirectX 的游戏实际上并不需要此“旧版 DirectX SDK”框架包依赖项。

D3DCompiler_33.dl - D3DCompiler_43.dll
d3dcsx_42.dll, d3dcsx_43.dll
d3dx10.dll, d3dx10_33.dll - d3dx10_43.dll
d3dx11_42.dll, d3dx11_43.dll
d3dx9_24.dll - D3DX9_43.dll
x3daudio1_0.dll - X3DAudio1_7.dll
xactengine2_0.dll - xactengine2_9.dll
xactengine3_0.dll - xactengine3_7.dll
XAPOFX1_0.dll - XAPOFX1_5.dll
XAudio2_0.dll - XAudio2_7.dll
xinput1_1.dll - xinput1_3.dll

或者,您可以更新您的应用程序以删除旧版 DirectX SDK 依赖项。

  • 对于 XAudio2,最佳选择是使用 Windows 10 SDK 中的标题升级到 XAudio 2.9。 对于 Windows 10,XAudio 2.9、X3DAudio 和 XAPOFX 都内置在操作系统中。 对于非应用商店版本,可以使用 XAudio2Redist,它具有简单的应用程序本地再分配,支持 Windows 7 SP1 或更高版本的 XAudio2.9。 这既简化了部署,还解决了旧版 XAudio 2.7 的许多已知 bug。 请参阅 Microsoft 文档

  • 对于 XInput,最佳选择是使用 Windows 10 SDK 中的标题 XInput 1.4。 对于 Windows 10,XInput 1.4 包含在操作系统中。 对于非应用商店版本,可以使用包含在操作系统中 XInput 9.1.0,一直到 Windows Vista。 请参阅 此博客文章

强烈建议不要使用旧版 XInput 1.3,因为它存在已知的安全问题。 已更新框架包中的版本以解决此问题,以及更新到 SHA-256 代码签名,但原始旧版 DirectX 最终用户运行时包保持不变。

  • 对于 Direct3D 10d3dx10),最佳选择是升级到 Direct3D 11。 请参阅 Microsoft 文档

  • 对于 Direct3D 11d3dx11), 请参阅本博客文章 以获取针对 Direct3D 11 的旧版 D3DX 的各种替换项。

对于较旧的游戏,还可以考虑使用 Microsoft.DXSDK.D3DX NuGet 包,该包提供 2010 年 6 月版本的 D3DX9、D3DX10 和 D3DX11 以及并行许可证。 这些可再发行 DLL 也是 SHA-256 代码签名的。

  • 对于 HLSL 编译器 (D3DCompiler),可使用 Windows 10 SDK 中的最新版本。 对于 Windows 10,其包含在操作系统中。 对于非应用商店版本,可以将 D3DCompiler_47.dll 作为简单的应用程序本地文件与游戏一起包含。 请参阅 此博客文章

注意

此框架包和旧版 DirectX End-User 可再发行组件都不会以任何方式修改 DirectX 运行时。

示例 MicrosoftGame.config 代码片段:

<Game>

  <DesktopRegistration>
    <DependencyList>
      <KnownDependency Name="DX11"/>
    </DependencyList>
  </DesktopRegistration>

</Game>

有两种方法可以在开发或测试计算机上获取 DirectX 框架包。

  1. 从 Microsoft 下载站点下载,双击要安装的 Appx 文件(推荐)。 DirectX x86 框架包DirectX x64 框架包
  2. 从运行应用程序中输入以下链接以获取安装 DirectX 框架依赖项包的 DirectX 示例应用程序。 (注意:这仅适用于零售开发 Sandboxes(沙盒)中的计算机,如果您使用的是 x64 平台计算机,此功能将仅安装 x64 平台风格): ms-windows-store://pdp/?productid=9MTF6XHMN17Z

注意

DirectX 框架包不会将这些 DLL 安装到 System32 文件夹中。 它们位于你的打包应用程序在运行时的搜索路径中。 如果使用显式链接,请不要使用 LoadLibraryEx 标志 LOAD_LIBRARY_SEARCH_SYSTEM32LOAD_LIBRARY_SEARCH_APPLICATION_DIR 加载这些传统的 DirectX 库。

此框架包的 9.29.1974.0 版本包括 SHA-256 代码签名的有效负载 DLL,以及 XInput 1.3 的安全修补程序。

Visual Studio C++ 运行时

在 C/C++ 运行时的特定情况下,传统的可再发行文件形式和框架包形式并不总是完全相同。 传统的非 Microsoft Store 应用始终使用传统的可再发行文件形式。

Visual C/C++ 版本 推荐 APPX 框架包的下载链接
2015, 2017, 2019, 2022 传统可再发行文件形式和框架包形式是完全相同的,您可以任选一种。 但是,建议最好使用框架包。 适用于桌面桥的 VC 14.0 框架包
2013 MSIXVC 包装的应用必须使用框架版本。 否则,某些 API 可能会出现意外行为。 适用于桌面桥的 VC 12.0 框架包
2012 MSIXVC 包装的应用必须使用框架版本。 否则,某些 API 可能会出现意外行为。 适用于桌面桥的 VC 11.0 框架包
2010 及更早版本 MSIXVC 包装的应用应将传统可再发行文件中的松散文件合并到应用文件夹内的适当子文件夹中。 对于这些版本,既不应使用传统的可再发行文件,也不应使用框架包。 不适用

上述的安装程序会在以下 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 的示例清单项。

  <DesktopRegistration>
    <DependencyList>
      <KnownDependency Name="VC11"/>
    </DependencyList>
  </DesktopRegistration>

要旁加载此框架包

  • x86:

    1. 找到该框架包:

      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

    2. 双击它以安装,或者运行以下 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:

    1. 找到该框架包:

      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

    2. 双击它以安装,或者运行以下 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 的示例清单项。

  <DesktopRegistration>
    <DependencyList>
      <KnownDependency Name="VC12"/>
    </DependencyList>
  </DesktopRegistration>

要旁加载此框架包

  • x86:

    1. 找到该框架包:

      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

    2. 双击它以安装,或者运行以下 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:

    1. 找到该框架包:

      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

    2. 双击它以安装,或者运行以下 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 的示例清单条目。

  <DesktopRegistration>
    <DependencyList>
      <KnownDependency Name="VC14"/>
    </DependencyList>
  </DesktopRegistration>

要旁加载此框架包

  • x86:

    1. 找到该框架包:

      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

    2. 双击它以安装,或者运行以下 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:

    1. 找到该框架包:

      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

    2. 双击它以安装,或者运行以下 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"

请记住,VS 2015 Update 3、VS 2017、VS 2019 和 VS 2022 都使用相同的 REDIST,VS 2022 是最新的 REDIST。 有关详细信息, Microsoft Docs 信息。

本地测试

在已包含对相应清单的参考和旁加载 APPX 框架包后,使用以下命令安装应用的松散内部版本:
WdApp.exe register loose_build_path

这可确保应用已安装并引用正确的框架。 现在,从“开始”菜单中的此应用磁贴运行应用,然后对应用执行所需的测试和验证步骤。

在旁加载配置中完成测试之后,根据 使用 MSIXVC 包装工具包装面向电脑的游戏入门 话题中的说明创建 MSIXVC 包。

有关详细信息,请参阅在 Centennial 项目中使用 Visual C++ 运行时 博客文章。