Reflector導出.NET工程項目的修復


     我們知道Reflector可以反編譯IL代碼,根據它可以查看到不同語言的源代碼(如C#,VB.Net等),但是Reflector還可以導出成工程文件,得到源代碼的工程項目文件。通過這種方式得到的工程文件如果用Visual Studio打開后,雖然大多數的問題是由於缺少引用“程序集”帶來的編譯不能通過,但是還是一些非與此相關的問題存在,需要對反編譯的工程項目進行手動修改和調整。比如對於Winform程序中的窗體打開時候會出現一系列的錯誤提示:

 

1、設計器無法處理第 ** 行的代碼: this.okButton.DialogResult = DialogResult.Cancel; 方法“InitializeComponent”內的代碼由設計器生成,不應手動修改。請移除任何更改,然后嘗試重新打開設計器。

解決方法:對所有System.Winform.Forms.命名空間里面的控件需要全命名空間的申明,例如對上面的就改成

this.okButton.DialogResult=System.Windows.Forms.DialogResult.Cancel;

 

2、變量"manager"未申明或從未賦值

解決方法:本方法只限於在InitializeComponent中包含System.Resources.ResourceManager調用的窗體。

(1)資源文件格式轉換,將.resources(二進制)文件轉成.resx文件(XML)  用C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin下 resgen.exe  格式: resgen *.resources *.resx(.resx文件最好與窗體.cs文件同名)

(2)將InitializeComponent方法中的對象manager替換為resources(沒錯,只替換變量名^_^,全部都換掉哦,最好的辦法就是更改manager的申明)

(3)將資源文件.resx放到窗體文件.cs相同的文件夾下。

(4)將所有窗體(.cs)從工程中排除,再添加(這樣可以省去將.resx文件映射到.csproj的過程)。

 

3、打開窗體后類型****.Properties.Resources”沒有名為“Login”的屬性。

找到對應的代碼:    this.logoPictureBox.Image = Resources.Login;表示無法找到資源文件Login名稱。

(1)資源文件格式轉換,將.resources(二進制)文件轉成.resx文件(XML) 用C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin下 resgen.exe  格式: resgen *.resources *.resx(.resx文件最好與窗體.cs文件同名)。

(2)然后用VS打開轉換成功的*.resx文件就找到窗體的資源文件。

(3)將找到的窗體資源文件和對應的窗體即能解決。

 

4、針對winform的資源文件保護兩類:項目資源文件和窗體資源文件。

選擇資源的時候,資源上下文包含本地資源和項目資源文件。

(1)本地資源文件就是指當前窗體的資源(命名為窗體名.resx)

(2)項目資源文件是項目的資源(默認為Resources.resx)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM