查找 C# 中引用的非托管 C++ dll 的依赖项
Finding dependancies of unmanaged c++ dll referenced in C#
我有一个 C# winforms 应用程序,它使用我用 c++ 编写的 dll 作为非托管代码。在 4 台测试计算机上,该程序按预期运行。在 8 台测试计算机上 运行 运行程序时出现错误。
Unable to load DLL "myUnmanaged.dll". The specified module could not be found.
有问题的 dll 与 c# exe 位于同一目录中。 Visual studio设置为将文件复制到"compiling"c# exe.
时的位置
由于该程序在某些计算机上运行,而在其他计算机上运行,我猜测该应用程序运行的计算机上已经有一些 dll,我的程序运行需要这些 dll。
我会注意到我的非托管 dll 包括从名为 SetupApi.dll 的 windows 工具包调用另一个 dll。让 Visual Studio 正确引用此 dll 需要将 VS 直接指向它的 lib 文件,以便编译我的 dll。 运行 我的程序正确地在所有计算机上 setupapi.dll 位于 windows\system32 目录中。一些没有正确 运行 我的程序的计算机也有 setupapi.dll 位于 windows\system32 目录中。为了进行测试,我将 setupapi.dll 放在与我的 c# exe 相同的目录中,并在无法运行的计算机上重新测试,结果相同。
我如何找出我缺少的文件/依赖项阻止我的应用程序在某些计算机上运行?
我正在使用 VS express 2013 编写软件。它缺少专业版的一些功能。一种解决方案是生成一个 MSI 文件,它会包含依赖项。但这是我无权访问的专业功能。
如有任何帮助,我们将不胜感激。
关于 32-bit/64-bit 的信息:
c# 应用程序和非托管 c++ dll 都是在 32 位 (x86) 中构建的。该程序运行的测试计算机中有 3 台是 64 位 win OS(vista 64 位,win7 64 位,win8.1 64 位),该程序运行的测试计算机之一是 Win7 32 -少量。我的应用程序无法运行的计算机包括 32 位和 64 位计算机。因此,我相当确定我的问题与 OS.
的位数无关
Please use .net reflactor or dependancy walker make sure you are using
x86 or x64 version according to what you need – Gilad
对原始问题的评论最终包含了解决方案。我按照推荐使用了 dependency walker 来查找丢失的 dll。
我有一个 C# winforms 应用程序,它使用我用 c++ 编写的 dll 作为非托管代码。在 4 台测试计算机上,该程序按预期运行。在 8 台测试计算机上 运行 运行程序时出现错误。
Unable to load DLL "myUnmanaged.dll". The specified module could not be found.
有问题的 dll 与 c# exe 位于同一目录中。 Visual studio设置为将文件复制到"compiling"c# exe.
时的位置由于该程序在某些计算机上运行,而在其他计算机上运行,我猜测该应用程序运行的计算机上已经有一些 dll,我的程序运行需要这些 dll。
我会注意到我的非托管 dll 包括从名为 SetupApi.dll 的 windows 工具包调用另一个 dll。让 Visual Studio 正确引用此 dll 需要将 VS 直接指向它的 lib 文件,以便编译我的 dll。 运行 我的程序正确地在所有计算机上 setupapi.dll 位于 windows\system32 目录中。一些没有正确 运行 我的程序的计算机也有 setupapi.dll 位于 windows\system32 目录中。为了进行测试,我将 setupapi.dll 放在与我的 c# exe 相同的目录中,并在无法运行的计算机上重新测试,结果相同。
我如何找出我缺少的文件/依赖项阻止我的应用程序在某些计算机上运行?
我正在使用 VS express 2013 编写软件。它缺少专业版的一些功能。一种解决方案是生成一个 MSI 文件,它会包含依赖项。但这是我无权访问的专业功能。
如有任何帮助,我们将不胜感激。
关于 32-bit/64-bit 的信息:
c# 应用程序和非托管 c++ dll 都是在 32 位 (x86) 中构建的。该程序运行的测试计算机中有 3 台是 64 位 win OS(vista 64 位,win7 64 位,win8.1 64 位),该程序运行的测试计算机之一是 Win7 32 -少量。我的应用程序无法运行的计算机包括 32 位和 64 位计算机。因此,我相当确定我的问题与 OS.
Please use .net reflactor or dependancy walker make sure you are using x86 or x64 version according to what you need – Gilad
对原始问题的评论最终包含了解决方案。我按照推荐使用了 dependency walker 来查找丢失的 dll。