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

Cor*_*ten 3 .net linker c++-cli visual-studio-2010 visual-studio

在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
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

Ree*_*sey 5

你不能 - 永远需要DLL..LIB文件是该DLL 的导入库.

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