我正在开发使用DirectX进行图形渲染的应用程序。我必须指出,我没有使用XNA或SlimDX,尽管我可能应该这样做。但是,在项目启动时我不知道这一点,现在已经太晚了,因为需要很长时间才能转换为其中的任何一个。部署使用DirectX程序集的C#应用程序
也就是说,我需要将应用程序部署到用户。在我的项目,我引用如下组件:
- 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,版本= 1.0.2902.0,文化=中性公钥= 31bf3856ad364e35”或一个的依赖关系。该系统找不到指定的文件。
例如,如果最新的独立安装程序是从Microsoft网站下载并安装的,则会注册程序集。当他们没有安装时,我不确定这种情况,但它发生了。经常。
我的问题:
- 为什么有时的DirectX注册这些组件有时不?
- 从 应用程序中引用DirectX程序集的正确方法是什么?
它们是不同机器和开发PC上的相同组件版本吗? – 2012-03-26 10:34:25
@Adam其实,我不确定。我的目标是可以追溯到2005年的DirectX 9 DLL。一些用户正在安装DirectX 11(当然这是更新的),并且应用程序失败。我认为更新版本的DirectX应该安装所有以前的DLL版本,以便允许应用程序兼容性。如果不是这种情况,我不得不引用多个版本的程序集。我对吗? – 2012-03-26 11:10:16
从DirectX文档看,它看起来好像部署了每个版本。你有没有想过在你的安装包中包含DirectX安装。按照http://msdn.microsoft.com/en-us/library/windows/desktop/ee416644(v=vs.85).aspx – 2012-03-26 11:52:03