惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
腾讯CDC
D
Docker
G
Google Developers Blog
D
DataBreaches.Net
雷峰网
雷峰网
Blog — PlanetScale
Blog — PlanetScale
S
SegmentFault 最新的问题
The Cloudflare Blog
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Stack Overflow Blog
Stack Overflow Blog
大猫的无限游戏
大猫的无限游戏
量子位
美团技术团队
aimingoo的专栏
aimingoo的专栏
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Engineering at Meta
Engineering at Meta
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - jk

我们向IT界贡献了什么? mvc MVVM 一个动态创建卸载应用程序域的例子 一个简单的动态加载控件并保存控件信息的框架 一个自己设计的软件框架 可删除图片小软件 什么是AOP? “长尾理论” 技术在创业团队中的重要性 如何进行成功的创业-程序员创业白皮书 对话周鸿袆:从程序员创业谈起 十个习惯让你精通新的开发技术 精通语言不等于是一个好的软件开发人员 如何从容应对新技术暗潮 Visual Studio2005无法启动web调试的真正原因 互联网给我们了学习和交流的平台 交互界面与输入(2) 交互界面与输入(1)
用Reflactor的FileGenerator插件反编译代码后
jk · 2011-09-21 · via 博客园 - jk

相信大多数.Net程序员都有使用Reflactor的经历。无论出于什么目的,当用Reflactor反编译托管程序后,还想对其代码加以修改,那么本文所列举的可能是一份有用的参考。

用Reflactor的FileGenerator插件反编译代码后可以得到包括项目文件的源代码,但代码中存在各种问题,一般无法一次编译通过,以下将详谈这些问题:


枚举问题

为了代码可读,可能需要花点时间查阅metadata把int值修改回枚举值,尤其是想利用窗体设计器的,VS2008可能还不理解int值。


属性问题

比如一个叫Names的属性被反编译后,可能还原为的set_Names(names),get_Names()方法,逐个替换可能很慢,可采用正则表达式整体替换。
对于set_Xxx(xxx)方法,可替换
set_{[a-z]*}\(

\1 = (
对于get_Xxx()方法,可替换
get_{[a-z]*}\(\)

\1
然后,再修复个别被误换的方法。


委托和回调函数问题

一般会被还原为add_Xxx(MethodsName)方法,需要改为 += MethodsName


资源问题

需要使用.Net Framework SDK 下的 resgen.exe 工具,反编译嵌入资源文件*.resources为*.resx文件,
语法为:ResGen.exe *.resources *.resx,然后将*.resx包含入项目,就会自动和同名的窗体文件*.cs关联,如果没有关联可采用先排除再添加大法,一一搞定。


命名空间问题

如果需要切换到IDE的窗体设计器,而不出错,则还需要在*.cs中添加比如System.Windows.Forms的命名空间前缀。


窗体设计器识别问题

需要把以下代码
ComponentResourceManager manager = new ComponentResourceManager(typeof(ClassName));
替换为
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ClassName));
窗体设计器才能正常识别。