部署使用DirectX程序集的C#应用​​程序

时间:2012-03-26 10:30:33

标签: c# deployment directx assemblies

我正在开发使用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网站下载并安装了最新的独立安装程序,则会注册程序集。我不确定他们没有安装的情况,但它发生了。常。

我的问题:

  1. 为什么DirectX有时会注册这些程序集,有时却不注册?
  2. 从内部引用DirectX程序集的正确方法是什么 申请?

2 个答案:

答案 0 :(得分:2)

我遇到了与SimConnect DLL类似的东西,它是Flight Simulator的一部分。在这种情况下,如果用户在安装.Net框架之前安装了Flight Simulator,则证明DLL未添加到GAC。

我猜这里发生了类似的事情。

这当然意味着它只能在默认情况下没有.Net的XP系统上发生,并且应该在安装.Net后重新安装DX后修复。

答案 1 :(得分:2)

你看到这些问题我并不感到惊讶。您依赖于一个非常陈旧,已停产且不再支持的API。最新的运行时安装程序仍然会出于兼容性目的安装程序集,但默认情况下它们不包括在内,因为它们不希望任何人使用它们。

老实说,他们真的很老(比如,10岁),他们有许多已知的错误和问题,永远不会被修复,并且那里有完全可以接受的替代品。只要您继续支持您的应用,您应该切换到其中一个或辞职以处理此类问题。