FileNotFoundException -动态发现

本文关键字:发现 动态 FileNotFoundException | 更新日期: 2023-09-27 18:19:15

相当简单的问题,我希望,但我还没有设法找到一个答案,但谷歌的工作…

我在c#测试上下文中工作,并引用一个托管的c++ DLL,然后引用正常的c++程序集。当我尝试运行我的测试时,我得到一个FileNotFoundException,它没有给我任何关于它无法找到的文件的详细信息。

先。FileNotFoundException:指定的模块不存在发现。(Exception from HRESULT: 0x8007007E)

我已经用ProcMon做了一些检查,发现它正在尝试加载一个c++ DLL,但它正在探测所有标准位置(C:'Windows, C:'Windows' system等)。我是否可以将其重定向到包含所有二进制文件构建到的附加文件夹?

我猜AppDomain上有什么东西,但我还不太清楚该使用哪个属性,哪个会起作用

FileNotFoundException -动态发现

只需将该路径添加到Path环境变量中。

在Windows 7:按Windows键,输入'environment',选择Edit the system environment variables,选择Environment variables…添加路径…

编程方式:参见本文

但我认为更常见的方法是将引用的dll复制到您的输出目录。即使这需要更多的磁盘空间,它也保证了引用的dll总是与您的c#应用程序兼容。如果dll因CVS更新而更改,而您没有重新构建c#应用程序,则它可能无法按预期启动。

按照Hans的建议:

[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetDllDirectory(string lpPathName);
SetDllDirectory(@"C:'SomeDir");