FileNotFoundException - 动态发现

时间:2012-01-03 16:43:21

标签: c# exception testing

相当简单的问题,我希望,但我还没有找到一个有效的Google答案......

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

  

System.IO.FileNotFoundException:指定的模块不能   找到。 (HRESULT异常:0x8007007E)

我已经对ProcMon进行了一些检查,发现它正在尝试加载其中一个C ++ DLL,但它正在探测所有标准位置(C:\ Windows,C:\ Windows \ System等...)。有没有办法可以将其重定向到包含我们所有二进制文件构建的附加文件夹?

我猜测AppDomain上有什么东西,但我还没弄清楚要使用哪个属性,哪个属性都可以。

2 个答案:

答案 0 :(得分:1)

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

在Windows 7中:按Windows键,输入“环境”,选择Edit the system environment variables,选择Environment variables ...添加路径...

以编程方式:请参阅this post

但我认为更常见的方法是将引用的DLL复制到输出目录。即使这需要更多磁盘空间,也可以保证引用的DLL始终与C#应用程序兼容。如果DLL通过CVS更新而更改,并且您没有重建C#应用程序,则可能无法按预期启动。

答案 1 :(得分:1)

根据汉斯的建议:

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

SetDllDirectory(@"C:\SomeDir");