关于Dll修改名称调用的问题?

.Net技术 码拜 9年前 (2015-05-11) 1657次浏览 0个评论
 

C#编译环境下

如图所示,A.dll和B.dll没有源代码,他们被M.sln引用,然后编译生成M1.dll。

由于某些原因,我想把A.dll和B.dll的名字换掉,用C.dll和D.dll,然后被M.sln引用,编译没有报错,顺利生成M2.dll。

但是在另一个新sln里面引用M2.Dll时,代码编译出错。引用M1.dll没错。

请说一下原因,谢谢。

关于Dll修改名称调用的问题?

20分
编译会出错吗?
我估计只在运行时出错,因为程序集的名字和文件名是不同的。
10分
sln引用m2.dll的时候,把c.dll和d.dll放进去了吗?
如果你放的还是a和b,当然会找不到引用
引用 1 楼 Saleayas 的回复:

编译会出错吗?
我估计只在运行时出错,因为程序集的名字和文件名是不同的。

你好,
编译不报错,就是运行出错。

关于Dll修改名称调用的问题?

引用 2 楼 Z65443344 的回复:

sln引用m2.dll的时候,把c.dll和d.dll放进去了吗?
如果你放的还是a和b,当然会找不到引用

是的,放的是c.dll, d.dll

我现在怀疑,是不是dll改了名字后,再引用,会对程序有影响。

要么就是原来的a.dll和b.dll加入了防止修改名字的代码

5分
通常情况下引用只保存了名称,版本等信息,加载时是通过名称去查找dll的,你改了名字默认就找不到了
如果需要自定义引用文件名,你需要手动编辑程序的配置:
https://msdn.microsoft.com/en-us/library/1xtk877y%28v=vs.110%29.aspx
各位,我重新画了一个图,或许更清晰些。

刚才测试还发现一个问题,就是用A.dll B.dll生成了M1.dll,我修改了一下程序集名称为M3,就生成了M3.dll。

测试M3.dll依旧报错。

是不是程序里面加了反射之类的,会检测dll名字是否被修改。

关于Dll修改名称调用的问题?

引用 5 楼 shingoscar 的回复:

通常情况下引用只保存了名称,版本等信息,加载时是通过名称去查找dll的,你改了名字默认就找不到了
如果需要自定义引用文件名,你需要手动编辑程序的配置:
https://msdn.microsoft.com/en-us/library/1xtk877y%28v=vs.110%29.aspx

貌似这个程序只是引用了dll,没有动态加载dll的load之类的代码。

各位,刚才俄罗斯老外回复我

关于Dll修改名称调用的问题?

看来只能研究一下ILMerge了

5分
偷梁换柱的话,必须用新编译的DLL同名覆盖原来的DLL吧.
间接引用DLL的话,感觉需要把所有项目归到一个解决方案中,才能自动匹配到, 否则只能单独添加缺少的DLL文件到新的运行目录.

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于Dll修改名称调用的问题?
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!