2017-08-17 64 views
1

我剛剛繼承了一個源代碼很久已丟失的Web應用程序(最初編寫於2010年並擱置)。該應用程序有幾個與應用程序本身相關的.dll程序集,例如「applicationCORE.dll」,「applicationBI.dll」,「applicationDATA.dll」和「application.dll」如何反編譯ASP.NET/C#Web應用程序

我見過this question和建議的工具(Just Decompile)很棒,創建了一個.sln和.csproj文件爲我反編譯的第一個程序集。我的問題是,如何將通過反編譯創建的各種項目與編譯的Web應用程序文件(.aspx)合併,我如何解析.aspx文件中的引用,即引用不再存在的代碼隱藏文件,例如「default.aspx」引用「default.aspx.cs」,而反編譯器創建一個「default.cs」文件。重命名.cs文件還是更新引用更安全?

最後,將每個dll作爲解決方案中的單獨項目出現嗎?

我意識到這可能被認爲是一個重複的問題,但似乎並沒有一個在線資源通過這個過程來引導開發人員。

+0

不確定您的意思是「合併各個項目」。至於文件名等框架約定,您可能需要手動更正所有這些。將一個足夠複雜的應用程序反編譯成可用的源代碼是一個艱難的過程,並且是丟失源代碼的代價。我懷疑每個DLL都是自己的項目,我無法想象任何其他方式來構造,即使是原始的源代碼。 – David

+0

對不起,我的術語可能不正確,我指的是合併Web文件與不同的項目。從您的回覆中,聽起來像我應該使用「application.dll」解決方案文件,手動更新引用,然後將其他「.dll」文件生成的項目(反編譯後)添加到解決方案中?我知道它的苦心經歷 - 在你看來,與重寫看似複雜的應用程序相比,它是一條更長的道路嗎? – Daniel

+0

我可能會採用創建應用程序/解決方案/等的空殼的方法。作爲一種「受控環境」,然後手動將反編譯的代碼轉換爲該代碼。至於什麼是更長的路徑,這是由你的組織來決定的。他們想要通往哪條路?一種可能會工作一段時間的膠帶解決方案?具有文檔和可測試性和支持的企業應用程序?中間某個地方?在正在編寫的實際代碼行之外,這個決定很多。 – David

回答

2

遵循David的建議,我設法從反編譯的程序集中運行應用程序。這是我遵循的過程來使它工作

  1. 我已經使用反射器(在試用版)反編譯各種程序集到項目。
  2. 我在Visual Studio
  3. 創建一個空白Web窗體應用程序添加我從網站上.aspx頁面到項目通過Visual Studio
  4. 然後加入從反編譯「application.dll」項目的.cs文件(因爲這是解決方案中的網站項目。有些文件必須被重命名爲在'的.aspx匹配codebehind引用。文件
  5. 每個額外的項目如applicationCore.dll,然後加入到溶液中
  6. 每個項目的是需要引用更新並且必須添加對新添加的項目的引用編輯到啓動項目
  7. 由於該網站很早以前就已建成,因此有1000個語法錯誤。解決它們的最簡單方法是使用Notepad ++和查找和替換。爲了安全起見,我通過跟蹤來自Visual Studio的錯誤而不是批量查找和替換來做這個文件,而不是批量查找和替換
  8. 當試圖建立我注意到錯誤,因爲需要的程序集丟失,所以我改變了構建輸出目錄的子項目到bin Web項目文件夾
  9. 我從原始網站的web.config中添加了連接字符串和設置。我一行一行地確保我沒有破壞任何東西,這樣我就可以追蹤每次添加的結果。
  10. 最後,我有一個成功的構建!

其他步驟 還有一些我認爲是由於反編譯過程造成的語法錯誤。需要添加一些外部參考文獻,並且由於項目的年齡而有輕微變化,例如, asp:AjaxScriptControl更改爲asp:ScriptControl(使用Nuget添加包後)。我還必須爲此應用程序安裝Crystal Reports,並且必須購買Telerik許可證,因爲正在使用UI組件(儘管我會在我通過應用程序工作時看到是否可以使用開放/本地備用)。

我已經登錄使用憑據(我必須設置正確的開始頁面),並嘗試了幾個基本的CRUD操作。有一些愚蠢的問題需要解決,例如身份驗證無法正常工作,如果您訪問受保護的頁面,則無法重定向,但與最初遇到的問題相比,這些內容相對較小。

我必須說的是,每個錯誤都使用本網站的問題和答案解決!這一切都在6小時內完成。

相關問題