FileNotFoundException尝试从托管代码加载DLL
问题描述:
首先,我想说我对Windows链接系统不太熟悉。 (我的大部分编程经验都是在Mac OS上获得的,其中链接库和框架完全不同,我也不是Windows用户。)FileNotFoundException尝试从托管代码加载DLL
这是我的设置:我有两个项目同样的解决方案。第一个是C++/CLI项目,我们将其称为Foo
。 Foo
是一个依赖于外部库(Java运行时环境)的库项目,因此具有适当的参考(相信编译后).lib文件。 (我没有更改与加载该库相关的其他项目设置。)我的其他项目,Bar
是C#控制台可执行项目,参考Foo
。
两者都编译得很好。
但是,当我执行我的Bar.exe
C#程序时,它会在构建需要Foo
类型的第一个对象之前死亡。例外是一个FileNotFoundException
,它声明Foo.dll
程序集或其某个依赖项无法找到。
因此,我启动了fuslogvw
以查看出了什么问题,但我并不真正了解它是如何工作的,我在其上找到的文档相当无益。根据我的理解,Foo
和Bar
均未能作为原始图像加载,但发现它们是正确的IL,并且以正确方式加载。没有其他相关的失败提及,但显然确实在失败。我会发布日志,但他们用法语,我认为这将是无用的。
有什么想法?
外部库的DLL不在输出目录中,并且取决于确实报告它找不到它。我需要将DLL复制到那里,还是有更优雅的解决方案?这个项目的部署很可能只发生在我完全可以控制的机器上。 – zneak 2010-09-27 21:22:33
这将取决于你如何链接到DLL,以及它如何被加载,这可能会涉及DLL搜索顺序。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms682586.aspx。 – 2010-09-27 22:08:17
所以我会首先将DLL复制到输出目录,以确保它解决了当前的问题,然后决定如何处理部署。 – 2010-09-27 22:16:33