我正在开发使用DirectX进行图形渲染的应用程序。我必须指出我不是在使用XNA或SlimDX,尽管我可能应该这样做。但是,我在项目启动时并不知道这一点,现在已经太晚了,因为转换到其中任何一个都需要花费很多时间。
那就是说,我需要将应用程序部署到用户。在我的项目中,我引用了以下程序集:
我只需要这些装配,没有别的。用户必须在其计算机上安装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网站下载并安装了最新的独立安装程序,则会注册程序集。我不确定他们没有安装的情况,但它发生了。常。
我的问题:
答案 0 :(得分:2)
我遇到了与SimConnect DLL类似的东西,它是Flight Simulator的一部分。在这种情况下,如果用户在安装.Net框架之前安装了Flight Simulator,则证明DLL未添加到GAC。
我猜这里发生了类似的事情。
这当然意味着它只能在默认情况下没有.Net的XP系统上发生,并且应该在安装.Net后重新安装DX后修复。
答案 1 :(得分:2)
你看到这些问题我并不感到惊讶。您依赖于一个非常陈旧,已停产且不再支持的API。最新的运行时安装程序仍然会出于兼容性目的安装程序集,但默认情况下它们不包括在内,因为它们不希望任何人使用它们。
老实说,他们真的很老(比如,10岁),他们有许多已知的错误和问题,永远不会被修复,并且那里有完全可以接受的替代品。只要您继续支持您的应用,您应该切换到其中一个或辞职以处理此类问题。