您的位置:首页 > 其它

使用Reflector工具时注意的一些问题

2009-09-01 13:37 211 查看
最近使用Reflector工具时出现一些问题,下面是解决办法。

枚举问题

为了代码可读,可能需要花点时间查阅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));

窗体设计器才能正常识别。

其它的还有base.FormBorderStyle = FormBorderStyle.None;要改为

base.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;

还有this.components = new Container();要改为this.components = new System.ComponentModel.Container();

base.AutoScaleMode = AutoScaleMode.Dpi;改为base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;

base.FormBorderStyle = FormBorderStyle.None;改为base.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: