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

标签 c# deployment directx assemblies

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

我的问题:

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

最佳答案

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

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

关于c# - 部署使用 DirectX 程序集的 C# 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9870507/

相关文章:

c# - 使用 C# 使用 OleDb 解析 CSV

c# - 在 Visual Studio 中查找所有继承接口(interface)的类

c# - 资源争用

DirectX:关于 D​​irectX LockRect()

c# - 比较两个对象的内容是否相等

c# - 使用正确的编码将字节数组转换为字符串

带端口转发的 Kubernetes 服务没有负载平衡

deployment - 在哪里可以找到有关 VS 2010 部署的最新信息/演练?

deployment - Capistrano 编译 Assets 错误 - Assets :precompile:nondigest?

c++ - 无法通过D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX共享D3D11_USAGE_STAGING资源