我正在开发使用 DirectX 进行图形渲染的应用程序。我必须指出,我没有使用 XNA 或 SlimDX,尽管我可能应该使用。然而,我在项目启动时并不知道这一点,现在为时已晚,因为转换到其中任何一个都需要花费大量时间。
也就是说,我需要将应用程序部署给用户。在我的项目中,我引用了以下程序集:
- 微软.DirectX
- Microsoft.DirectX.Direct3D
- Microsoft.DirectX.Direct3DX
我只需要这些程序集,不需要其他任何东西。作为先决条件,用户的计算机上必须安装 DirectX。因此,我发现将这些 DirectX DLL 添加到我的应用程序文件夹或 GAC 中是不必要的。
我在某些环境中遇到问题,而其他环境却工作得很好。我已将问题追溯到 DirectX 程序集是否在 %windir%\assembly 中注册。如果此处列出了 DirectX 程序集,则应用程序将运行。如果没有 - 则无法启动。
问题是,即使所有计算机上都安装了 DirectX(dxdiag 可以工作,其中列出了 DirectX 文件),但其中一些计算机上没有列出这些程序集。发生这种情况时,应用程序将失败并出现 System.IO.FileNotFound 异常:
Could not load file or assembly 'Microsoft.DirectX.Direct3D, Version=1.0.2902.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
例如,如果从 Microsoft 网站下载最新的独立安装程序并安装,则程序集将被注册。我不确定它们未安装时的情况,但它确实发生了。经常。
我的问题:
- 为什么 DirectX 有时注册这些程序集有时不注册?
- 从内部引用 DirectX 程序集的正确方法是什么 应用程序?
最佳答案
您看到这些问题我并不感到惊讶。您依赖的是一个非常旧的、已停产且不再受支持的 API。出于兼容性目的,最新的运行时安装程序仍会安装程序集,但默认情况下不包含它们,因为它们不希望任何人使用它们。
老实说,它们真的很旧(比如 10 岁),有许多已知的错误和问题,永远不会被修复,并且有完全可以接受的替代品。您应该切换到其中之一,或者只要您继续支持您的应用程序,就放弃处理此类问题。
关于c# - 部署使用 DirectX 程序集的 C# 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9870507/