Reflactor是.net下的免费反编译工具,具体使用这里就不介绍了。Reflactor在某些情况下是很必须的,当遇到bug的时候,可以通过Reflactor看其内部的实现机制,从而找到真正的bug所在。或者可以通过reflactor查看私有生成,然后在用反射去调用。 反编译的文件默认保存在My Documents\Reflector\Disassembler下,但是这个反编译有一些问题,对于winform的资源文件无法反编译。这就需要我们另寻他法:即使用插件File dessassembler,它能实现这样的功能。反编译出来后,用visual sutio打开后就能编辑了,但是有时候会有一些问题。下面总结一下。 1 private static string SettingFileName = Path.Combine(SettingFolderPath, @"GoogleMusicDesktop\config.xml"); 问题很好解决,交换一下这两个变量的位置就解决了。 2、出现无法找到资源文件,如图片等 用Reflactor的FileGenerator插件反编译代码后得到的源代码一般存在各种问题,无法一次编译通过,以下将详谈这些问题: 1、枚举问题
为了代码可读,可能需要花点时间查阅metadata把int值修改回枚举值,尤其是想利用窗体设计器的,VS2008可能还不理解int值。 2、属性问题
比如一个叫Names的属性被反编译后,可能还原为的set_Names(names),get_Names()方法,逐个替换可能很慢,可采用正则表达式整体替换。 3、委托和回调函数问题
一般会被还原为add_Xxx(MethodsName)方法,需要改为 += MethodsName 4、资源问题
需要使用.Net Framework SDK 下的 resgen.exe 工具,反编译嵌入资源文件*.resources为*.resx文件,语法为:ResGen.exe *.resources *.resx,然后将*.resx包含入项目,就会自动和同名的窗体文件*.cs关联,如果没有关联可采用先排除再添加大法,一一搞定。 5、命名空间问题
如果需要切换到IDE的窗体设计器,而不出错,则还需要在*.cs中添加比如System.Windows.Forms的命名空间前缀。 6、窗体设计器识别问题 需要把以下代码 还有,用FileDisassembler反编译Windows Application出现了的resx资源文件和cs文件不匹配,项目编译 通不过,把resx文件修改放入cs文件夹后,虽然运行没有问题,但是不能直接在窗体设计里面"可视地"修改控件,一来麻烦,二来不直观,那么就应该修改下源代码,使其符合VS2008的源文件布局.下面总结一下修改的步骤: 1.由于FileDisassembler会给每个命名空间生成一个目录,保存这个空间的源代码,而对于资源resx文件就是直接加在项目目录下,所有要把它放回源码目录下.例如:对于项目文件夹里面的TryAssemb.Form1.resx,首先改为Form1.resx然后移动到TryAssemb目录里面. 2.然后对窗体打开"视图设计器",发现会出现下面的错误: 修改方法就是对所有System.Windows.Forms.命名空间里面的控件需要全命名空间的声明,例如里面上图的base.AutoScaleMode = AutoScaleMode.Font;就要改成base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;而TextBox textBox1; 也要改成private System.Windows.Forms.TextBox textBox1;这样VS2008就能识别到这个控件是要绘制在Form上面的.
参考: (mugua) |