关于Dll修改名称调用的问题?可能解决方案:ILMerge

ILMerge参考文章

https://www.bbsmax.com/A/gAJGlAn05Z/

https://blog.csdn.net/wpwalter/article/details/100156665/

https://www.cnblogs.com/cogito/p/it_tools04.html

Vincent_Wang_7892015-05-06 09:54:14

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没错。

请说一下原因,谢谢。

----------------------------------------------------------------------------------------------

评论答复:

表友善的回复…发表回复

Poopaye 2015-05-06

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

Vincent_Wang_789 2015-05-06

引用 2 楼 Z65443344 的回复:

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

是的,放的是c.dll, d.dll 我现在怀疑,是不是dll改了名字后,再引用,会对程序有影响。 要么就是原来的a.dll和b.dll加入了防止修改名字的代码

Vincent_Wang_789 2015-05-06

引用 1 楼 Saleayas 的回复:

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

你好,

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

於黾 2015-05-06

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

Saleayas 2015-05-06

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

tcmakebest 2015-05-06

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

Vincent_Wang_789 2015-05-06

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

看来只能研究一下ILMerge了

Vincent_Wang_789 2015-05-06

引用 5 楼 shingoscar 的回复:

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

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

Vincent_Wang_789 2015-05-06

各位,我重新画了一个图,或许更清晰些。

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

测试M3.dll依旧报错。

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值