使用 ildasm 和 ilasm 修改程序集的的引用信息

 最近升级了一个项目, 把框架从 .NET2.0 升级到 .NET4.0, 把相关的 DLL 也更新了, 如 Newtonsoft.Json。

 

今天客户有测试说有一个功能出错了, 提示找不到  Newtonsoft.Json.Net20, 打开这个文件一看, 发现使用了一个第三方的组件, 这个第三方的组件引用了此组件, 坑爹的是这个第三方组件已经没有更新了, 而且也没有源代码,只能想办法把这个第三方组件的引用给改了。

经过研究,发现可以使用 ildasm 和 ilasm 工具配合来修改程序集的引用。

 

1、首先使用 ildasm 打开程序集,然后点 File -> Dump 菜单, 把程序集存为一个 il 的纯文本文件。

2、然后刚才保存的 il 文件,在文件的开头找到 

.assembly extern Newtonsoft.Json.Net20
{
.publickeytoken = (30 AD 4F E6 B2 A6 AE ED )
.ver 4:0:2:0
}

 

代码, 把此代码修改为

.assembly extern Newtonsoft.Json
{
.publickeytoken = (30 AD 4F E6 B2 A6 AE ED )
.ver 12:0:0:0
}

 

3、把代码中的程序集引用需要全部替换: 替换 [Newtonsoft.Json.Net20] 为 [Newtonsoft.Json]

4、最后使用 ilasm 工具重新编译 il 代码 ilasm source.il /output=assemblyName.dll /dll

 

ilasm 有版本限制, 在 Windows/Microsoft/FrameworkXX 下面找到对应的版本, 使用对应版本里的 ILASM 工具进行编译, 否则容易出现识别不了 DLL 内容的错误。

posted @ 2020-03-13 16:13  匡匡  阅读(273)  评论(0编辑  收藏  举报