国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

用Reflector和FileDisassembler配合反編譯.net Windows程序

2024-07-10 11:55:52
字體:
供稿:網(wǎng)友

用FileDisassembler反編譯Windows Application出現(xiàn)了問題,resx資源文件和cs文件不匹配,項(xiàng)目編譯根本通不過,把resx文件修改放入cs文件夾后,雖然運(yùn)行沒有

問題,但是不能直接在窗體設(shè)計(jì)里面"可視地"修改控件,一來麻煩,二來不直觀,那么就應(yīng)該修改下源代碼,使其符合VS2008的源文件布局.

下面總結(jié)一下修改的步驟:

1.由于FileDisassembler會(huì)給每個(gè)命名空間生成一個(gè)目錄,保存這個(gè)空間的源代碼,而對(duì)于資源resx文件就是直接加在項(xiàng)目目錄下,所有要把它放回源碼目錄下.例如

對(duì)于項(xiàng)目文件夾里面的TryAssemb.Form1.resx,首先改為Form1.resx然后移動(dòng)到TryAssemb目錄里面.

2.然后對(duì)窗體打開"視圖設(shè)計(jì)器",發(fā)現(xiàn)會(huì)出現(xiàn)下面的錯(cuò)誤: 

修改方法就是對(duì)所有System.Windows.Forms.命名空間里面的控件需要全命名空間的 聲明,例如里面上圖的base.AutoScaleMode = AutoScaleMode.Font;就要改成base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;而TextBox textBox1; 也要改成private System.Windows.Forms.TextBox textBox1;這樣VS2008就能識(shí)別到這個(gè)控件是要繪制在Form上面的. 

PS.開始是的時(shí)候還以為要像VS一樣把Form1拆開成Form1.cs和Form1.Designer.cs.每次是都辛辛苦苦拆開,最后才發(fā)現(xiàn)原來根本不需要,^_^. 

相信大多數(shù).Net程序員都有使用Reflactor的經(jīng)歷。無論出于什么目的,當(dāng)用Reflactor反編譯托管程序后,還想對(duì)其代碼加以修改,那么本文所列舉的可能是一份有用的參考。 

用Reflactor的FileGenerator插件反編譯代碼后可以得到包括項(xiàng)目文件的源代碼,但代碼中存在各種問題,一般無法一次編譯通過,以下將詳談這些問題:
枚舉問題 

為了代碼可讀,可能需要花點(diǎn)時(shí)間查閱metadata把int值修改回枚舉值,尤其是想利用窗體設(shè)計(jì)器的,VS2008可能還不理解int值。
屬性問題 

比如一個(gè)叫Names的屬性被反編譯后,可能還原為的set_Names(names),get_Names()方法,逐個(gè)替換可能很慢,可采用正則表達(dá)式整體替換。
對(duì)于set_Xxx(xxx)方法,可替換
set_{[a-z]*}/(

/1 = (
對(duì)于get_Xxx()方法,可替換
get_{[a-z]*}/(/)

/1
然后,再修復(fù)個(gè)別被誤換的方法。

委托和回調(diào)函數(shù)問題 

一般會(huì)被還原為add_Xxx(MethodsName)方法,需要改為 += MethodsName
資源問題 

需要使用.Net Framework SDK 下的 resgen.exe 工具,反編譯嵌入資源文件*.resources為*.resx文件,
語法為:ResGen.exe *.resources *.resx,然后將*.resx包含入項(xiàng)目,就會(huì)自動(dòng)和同名的窗體文件*.cs關(guān)聯(lián),如果沒有關(guān)聯(lián)可采用先排除再添加**,一一搞定。
命名空間問題 

如果需要切換到IDE的窗體設(shè)計(jì)器,而不出錯(cuò),則還需要在*.cs中添加比如System.Windows.Forms的命名空間前綴。
窗體設(shè)計(jì)器識(shí)別問題

需要把以下代碼
ComponentResourceManager manager = new ComponentResourceManager(typeof(ClassName));
替換為
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ClassName));
窗體設(shè)計(jì)器才能正常識(shí)別。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄平县| 泉州市| 曲麻莱县| 连州市| 泸西县| 盐亭县| 邹平县| 财经| 嵩明县| 漯河市| 郴州市| 高唐县| 和政县| 丹凤县| 宽甸| 建瓯市| 乌兰浩特市| 驻马店市| 延边| 六枝特区| 会同县| 桓仁| 肥西县| 保定市| 攀枝花市| 电白县| 青浦区| 岑溪市| 深水埗区| 公主岭市| 南雄市| 金华市| 黑河市| 涿鹿县| 岑巩县| 深泽县| 靖江市| 远安县| 台江县| 和田县| 灵台县|