Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
部署使用DirectX程序集的C#应用程序_C#_Deployment_Directx_Assemblies - Fatal编程技术网

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

部署使用DirectX程序集的C#应用程序,c#,deployment,directx,assemblies,C#,Deployment,Directx,Assemblies,我正在开发使用DirectX进行图形渲染的应用程序。我必须指出,我没有使用XNA或SlimDX,尽管我可能应该这样做。然而,我在项目启动时并不知道这一点,现在已经太迟了,因为转换成这些都需要很多时间 也就是说,我需要将应用程序部署到用户。在我的项目中,我引用了以下程序集: Microsoft.DirectX Microsoft.DirectX.Direct3D Microsoft.DirectX.Direct3DX 我只需要这些组件,别的什么都不需要。用户需要在其计算机上安装DirectX作

我正在开发使用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,版本=1.0.2902.0,区域性=中性,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。系统找不到指定的文件

例如,如果从Microsoft网站下载并安装了最新的独立安装程序,则会注册程序集。我不确定他们没有安装时的情况,但确实发生了。经常

我的问题是:

  • 为什么DirectX有时注册这些程序集,有时不注册
  • 从内部引用DirectX程序集的正确方法是什么 申请表

  • 我在飞行模拟器的SimConnect DLL中也经历过类似的事情。在这种情况下,如果用户在安装.Net framework之前安装了飞行模拟器,则DLL不会添加到GAC中

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


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

    我在飞行模拟器的SimConnect DLL中遇到过类似的情况。在这种情况下,如果用户在安装.Net framework之前安装了飞行模拟器,则DLL不会添加到GAC中

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


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

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


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

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


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

    它们在不同的机器和你的开发PC上是相同的组装版本吗?@Adam实际上,我一点也不确定。我的目标是2005年的DirectX 9 DLL。一些用户安装了DirectX 11(当然是更新的),应用程序失败。我假设DirectX的较新版本也应该安装所有以前的DLL版本,以便实现应用程序兼容性。如果不是这样,我将不得不引用多个版本的程序集。我说的对吗?从DirectX文档来看,每个版本都部署了。您是否考虑过在安装包中包含DirectX安装。因此,即使他们安装了它,安装也会悄悄地消失,尽管如果他们没有安装,它会悄悄地安装,然后继续。DirectX 11对以前版本的支持通过某种虚拟化而下降。如果您的程序需要DirectX 9,则需要该版本,请在您的技术支持网站上提供您构建的版本,并告诉用户安装该版本。为什么你不使用Direct X 11?它们在不同的机器和你的开发PC上是相同的汇编版本吗?@Adam实际上,我一点也不确定。我的目标是2005年的DirectX 9 DLL。一些用户安装了DirectX 11(当然是更新的),应用程序失败。我假设DirectX的较新版本也应该安装所有以前的DLL版本,以便实现应用程序兼容性。如果不是这样,我将不得不引用多个版本的程序集。我说的对吗?从DirectX文档来看,每个版本都部署了。您是否考虑过在安装包中包含DirectX安装。按照这样的说法,即使他们有