2 xxm csdn xxm_csdn 于 2015.06.02 19:46 提问

求助大神,c#dll调用问题,详细信息看下面

写了个程序和仪器通讯的,但需要调用厂商提供的3个dll,在我写的程序中,已经引用了一个dll,假设它叫a.dll,但是程序运行时a需要调用b.dll和c.dll中的方法进行计算,a/b/c都是厂商封装好的,我看不到,而且我用的话只需要引入a(厂商的参考例子就是这么写的,跑起来也没问题),但是我运行的时候显示找不到b。

Detail:

     Additionalinformation: 未能加载文件或程序集“c, Version=8.9.35.246,Culture=neutral, PublicKeyToken=18cbae0f9955702a”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)

错误类型:

  System.IO.FileloadException

我觉得,只引入a的话,那么a找b和c肯定是通过配置文件或者其他方式来获取路径,要是那样的话,怎么写呢

大神帮忙,小弟搞了好几天了,现在数据还读不出来

9个回答

gamefinity
gamefinity   Rxr 2015.06.02 20:43
已采纳
  • 1.是不是dotnet framework的版本不一致
  • 2.用ilspy确定依赖关系,确定版本和Token
  • 3.确定三个dll在执行时在同一个目录
xxm_csdn
xxm_csdn 没用过,ilspy,不过最后发现是dll版本的问题,厂商给换了一个版本,ok了
2 年多之前 回复
gamefinity
gamefinity 回复xxm_csdn: 运行的时候三个dll在同一个目录么?或者说你运行时调用的a是不是其他目录里面的a(比如说debug/bin下)?
2 年多之前 回复
xxm_csdn
xxm_csdn 不是版本问题,从2.0到4.0我都试过;我怀疑也是依赖关系的问题,只是不知道怎么配,是写配置文件还是其他
2 年多之前 回复
devmiao
devmiao   Ds   Rxr 2015.06.02 20:44

三个文件都要放进来,都引用下

xxm_csdn
xxm_csdn 试过了,没用
2 年多之前 回复
guwei4037
guwei4037   Ds   Rxr 2015.06.02 19:57

添加引用b.dll,错误描述就是这么提示的。估计是你调用的a.dll,里面用到了b.dll的方法。

xxm_csdn
xxm_csdn 我很确定是调a的方法,只不过a中被调用的方法会调c中的函数来计算,3个dll都引用也不好使
2 年多之前 回复
frank_20080215
frank_20080215   2015.06.02 21:39

将所有的dll都引入到解决方案

oyljerry
oyljerry   Ds   Rxr 2015.06.02 22:11

a,b,c三个放到一个目录中看能否加载。主要就是让他们能找到对方。

oyljerry
oyljerry 回复xxm_csdn: 那就是dll是否还有其他的依赖,你用depends查看一下
2 年多之前 回复
xxm_csdn
xxm_csdn 3个dll本来就是在一个目录下的
2 年多之前 回复
xxm_csdn
xxm_csdn 3个dll本来就是在一个目录下的
2 年多之前 回复
z702143700
z702143700   2015.06.02 22:35

你把这三个都添加引用到程序中。设置这三个程序集的属性,就好了。

LogicTeamLeader
LogicTeamLeader   2015.06.03 16:02

1.程序中只需要引用a.dll
2.将b.dll和c.dll放入a.dll的同一个目录
3.将abc这三个dll都放入windows的system32目录;

不行请密我。

guonan198811
guonan198811   2015.06.03 18:15

楼上LogicTeamLeader正解!

xxm_csdn
xxm_csdn   2015.06.04 17:06

不管怎么样,谢谢各位的方法

Csdn user default icon
上传中...
上传图片
插入图片