未能加载文件或程序集“XXX.dll”或它的某个依赖项的解决方法

问题:
昨天从开发机拷贝exe程序到测试机上测试时,发现程序一运行就报以下错误:未能加载文件或程序集“A.dll”或它的某一个依赖项。找不到指定的模块。
在这里插入图片描述
相关知识:
1.应用程序查找依赖的dll时,顺序为先查找程序exe的输出路径,如果没有找到,那么会去C:\Windows\System32文件夹中查找(如果exe为64位应用程序的话),或者去C:\Windows\SysWows64文件夹查找(exe为32位应用程序的话)。
2. 如果A.dll找到了,但是A.dll依赖的B.dll没有找到,也会报上述错误,但这时它有可能只会提示没有找到A.dll。此时我们可以用Visual Studio中的dumpbin.exe工具查找A.dll的依赖项,具体可以参考这篇博文
https://blog.csdn.net/jirryzhang/article/details/53816577

所以上述错误产生的原因可能为:
1.没有在exe指定A.dll所在的目录下找到A.dll(一般来说这个目录就是exe所在的目录)。
2.如果在开发机能正常运行该exe,而测试机却出现上述错误,那么就很有可能是我们把程序直接或间接依赖的某个dll放在了C:\Windows\System32文件夹或者C:\Windows\SysWows64文件夹中,然而的测试机的C盘中的这两个文件夹并没有该dll。

一般来说我们碰到上述问题可以按以下顺序排查错误:
解决方法:
1.如果提示的A.dll未找到,首先我们进入存放exe程序依赖的A.dll的位置(一般来说默认是放在exe同目录下)或者C盘的那两个文件夹,如果找不到A.dll那么就会出现上述错误,此时我们将A.dll放在该目录下查看问题是否解决。
2.如果未出现步骤1的情况或将A.dll放在该目录下仍报该错误。那么可能是A.dll依赖的dll没有放在该目录下,这时我们可以使用Visual Studio中的dumpbin查找A.dll依赖的dll是否放在该目录或者是C盘的那两个文件夹里,如果没有找到的话就从开发机拷贝出相应dll放在A.dll所在的目录里(不建议放在C盘的文件夹里,因为你不能保证其他电脑的C盘都有该dll),再进行测试看问题是否解决。

如何避免上述情况的产生:
平常我们做开发的时候,程序能正常跑通的话,最好去比较干净的,没有开发环境的电脑上自己测试一下…

补充:
当然出现上述情况的可能不止上述我提的原因,例如可能是dll的版本不对(比如32位的exe引用了64位的dll)等等情况…
上述归纳总结由于时间原因没有经过严谨论证,如果有疏忽错误欢迎批评指正。

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值