【发布时间】:2012-04-09 20:39:54
【问题描述】:
我正在开发使用 DirectX 进行图形渲染的应用程序。我必须指出我没有使用 XNA 或 SlimDX,尽管我可能应该使用。但是,我在项目启动时并不知道这一点,现在为时已晚,因为要转换成其中任何一个都需要很长时间。
也就是说,我需要将应用程序部署给用户。在我的项目中,我引用了以下程序集:
- Microsoft.DirectX
- Microsoft.DirectX.Direct3D
- Microsoft.DirectX.Direct3DX
我只需要这些程序集,别无其他。作为先决条件,用户必须在其计算机上安装 DirectX。因此,我发现没有必要将这些 DirectX DLL 包含到我的应用程序文件夹或 GAC 中。
我在某些环境中遇到问题,而其他环境却完美无缺。我已经追踪到 DirectX 程序集是否在 %windir%\assembly 中注册的问题。如果此处列出了 DirectX 程序集,则应用程序运行。如果没有 - 它无法启动。
问题在于,即使所有计算机上都安装了 DirectX(dxdiag 有效,其中列出了 DirectX 文件),但其中一些计算机并没有列出这些程序集。发生这种情况时,应用程序会因 System.IO.FileNotFound 异常而失败:
无法加载文件或程序集“Microsoft.DirectX.Direct3D, Version=1.0.2902.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或其依赖项之一。系统找不到指定的文件。
例如,如果从 Microsoft 网站下载并安装了最新的独立安装程序,则会注册程序集。我不确定没有安装它们的情况,但它确实发生了。经常。
我的问题:
- 为什么 DirectX 有时会注册这些程序集而有时不会?
- 从内部引用 DirectX 程序集的正确方法是什么 申请?
【问题讨论】:
-
它们在机器和开发 PC 上的程序集版本是否相同?
-
@Adam 实际上,我完全不确定。我的目标是可追溯到 2005 年的 DirectX 9 DLL。一些用户安装了 DirectX 11(当然是更新的)并且应用程序失败。我假设 DirectX 的更新版本也应该安装所有以前的 DLL 版本,以便实现应用程序兼容性。如果不是这种情况,我将不得不引用多个版本的程序集。我说的对吗?
-
从 DirectX 文档看来,每个版本都已部署。您是否考虑过在您的安装包中包含 DirectX 安装。根据msdn.microsoft.com/en-us/library/windows/desktop/…
-
因此,即使他们安装了它,安装也会悄悄地消失,但如果他们没有安装,它会静默安装然后继续。
-
DirectX 11 对以前版本的支持由于某种虚拟化而下降。如果您的程序需要 DirectX 9,则需要该版本,提供您在支持网站上构建的版本,并告诉用户安装该版本。为什么不针对 Direct X 11 构建?
标签: c# deployment directx assemblies