针对.lib编译的C ++ / CLI托管DLL无法加载,具有.dll依赖性。 (VS2010)

时间:2012-03-22 17:55:36

标签: .net visual-studio visual-studio-2010 linker c++-cli

在Visual Studio 2010中,我为作为.lib文件提供的外部库编写了C ++ / CLI托管类包装器,我们称之为ExternalLibrary.lib。 .lib作为项目的依赖项包含在内,并且在编译时不会发出警告或错误。

当我尝试使用这个包装器项目时,将它包含为C#项目的依赖项,当我在调试模式下运行时,我得到以下错误(项目默默无法在没有调试的情况下运行):

FileNotFoundException was unhandled
Could not load file or assembly 'WrapperProject.dll' or one of its dependencies.
The specified module could not be found

我验证了WrapperProject.dll位于C#项目的调试文件夹中,因此我决定使用Dependency Walker(http://dependencywalker.com/)检查其依赖项。列表的第一个依赖项是“ExternalLibrary.dll” ”。我认为这是问题,因为“ExternalLibrary.dll”从未存在过,只有“ExternalLibrary.lib”。如何告诉Visual Studio不要求不存在的DLL,而是包含.lib文件?

如果我从链接器路径中删除.lib,它已经抛出错误,所以它正在查找并找到该文件;我不确定为什么最后它会在不存在的.dll上添加依赖性。

由于

1 个答案:

答案 0 :(得分:5)

您不能 - 始终需要DLL。 .LIB文件是该DLL的import library

链接.lib文件只是告诉编译器如何在运行时从相应的.DLL(ExternalLibrary.dll)加载正确的信息。 .DLL仍然是必需的,需要与您的应用程序一起部署。