遗留ASP.NET项目升级log4net从1.2.10到3.0.4.0时的依赖冲突问题求助
遗留ASP.NET项目升级log4net从1.2.10到3.0.4.0时的依赖冲突问题求助
我手头有个年头很久的遗留ASP.NET Web项目,最近打算把log4net从1.2.10版本升级到最新的3.0.4版本,结果刚动手就碰到了麻烦——项目里还在用一些老库,比如NHibernate 2,这些库依赖的还是log4net 1.2.10版本。而且log4net从1.2.11版本开始就改了PublicKeyToken,这导致我没法通过web.config里的dependentassembly节点来解决版本冲突问题,愁死我了!
给你分享一个亲测有效的解决思路:
- 第一步,先把项目里所有直接引用的log4net 1.2.10版本全部替换成3.0.4版本
- 第二步,找到那些依赖老版本log4net的第三方程序集(比如你提到的NHibernate 2),用ILDasm工具把它们反编译成IL代码文件
- 第三步,打开生成的IL代码文件,把所有引用log4net的地方,原来的PublicKeyToken替换成3.0.4版本对应的
669e0ddf0bb1aa2a - 第四步,用ILAsm工具把修改后的IL代码重新编译成程序集,替换掉项目里原来的老程序集
这个方法的核心是“欺骗”老库,让它们以为自己调用的还是熟悉的老版本log4net,但实际上对接的是你升级后的新版本。好在log4net在这些版本之间的核心API兼容性很强,只要不是用到特别冷门的特性,基本不会出功能问题。
最后提醒下:操作前一定要备份好所有原程序集,万一修改出问题能及时回滚;替换后要做全面的功能测试,毕竟是遗留项目,难免有一些隐藏的调用细节需要验证。
备注:内容来源于stack exchange,提问作者Marc
相关产品推荐
相关产品推荐

