场景
c#项目需要调用c++编译的非托管dll。常见的方法是在c#中使用DllImport
。但这种方式似乎性能上差一些,延迟毫秒量级。(个人粗略测试)响应上不如直接引用C++/CLI混合编程方式编译的托管dll。
那么问题来了。经过C++/CLI成功编译生成了dll。在C#项目中也能正常调用,编译,执行。当我将项目部署在别的机器上时,就会报错,错误信息为”找不到xxx.dll“或者时”could not load file or assembly xxx.dll“。
这里需要提及的是,因为是开发调试阶段,所以c#项目及xxx.dll均为x86的debug版本。
解决方案
- 初步分析,认为可能是缺失了相应的dll。于是在部署机器上安装了完整的环境。依然报错。
- 使用Dependency Walker查看dll的依赖项,帮助不大。
- 最后使用xxx.dll的x86,Release版本运行成功。
- 这里有些疑惑,不清楚为什么会导致这样的情况。难道说,C#项目不支持或者找不到debug版本的C++/CLI编译的托管dll吗?
- 原因不明,暂且如此做应急处理。
如有大神知道,烦请指导一下。