某些专案因为历史久远没有Source Code,但有个需求需要异动里面的程式该怎么办??
难道只能整个反组译,查看程式码翻一份做新的吗?
不~~其实有办法直接对于DLL进行修改
只需使用 Reflexil 搭配 ILSpy 或其他支援的反组译软体
此文同步发布在 DotBlog
Reflexil 是一个组译编辑器插件目前支援 Reflector, ILSpy 和 Telerik's JustDecompile.
下载连结
Reflexil Release 2.2 搭配 ILSpy version 3.2
前置动作,安装
Reflexil 下载
下载 reflexil.for.ILSpy.2.2.bin.zip
,不用下载AIO
作者有说
ILSpy version 3.2 (ILSpy 4 is not currently compatible with Reflexil, given the use of System.Reflection.Metadata, deprecating Mono.Cecil usage)
ILSpy 4 当前版本 ILSpy.2.2 并不支援
ILSpy 3.2 下载
下载完后就把全部的DLL放在同一个资料夹下,并开启 ILSpy.exe
按下上方的齿轮UI 就可获得下方蓝色的Reflexil 修改框框.
组件修改
需求
目前组件 有个ClassA 类别,里面有一个prop1属性 型态是string, 我们希望在这新增另一个属性
使用滑鼠右键点击类别ClassA
,我们可以看到很多方式可以注入新的程式码
在这我们选择inject property
.
我们需要修改的是
Item Name (使用属性的名称)Property Type(使用属性类别)选择完后按下OK,我们就会发现prop2
新属性会出现在ClassA
中.
新增完后不代表已经将修改储存!!
我们需要点选组件,之后再按下Save AS
把本次修改储存
日后我们就可以使用新的属性在我们程式中了!!
小结
此插件还可以新增,插入许多东西时属非常强大,有兴趣的玩家可再自行深入琢磨.