探索剖析VS2003與VS2005編譯的全過程
由于VS2003與VS2005編譯程序太多,此處無法上傳,所以大家有communitysever的可以從里面獲得然后反編譯為自己所用,沒有的就到網(wǎng)絡(luò)上搜下吧,有許多資源呢!我就是在相關(guān)IT論壇上找到的。
ASP.NET 1.x中的編譯
ASP.NET1.x 中的主要編譯模型會導(dǎo)致一個應(yīng)用程序程序集(包含所有的已編譯代碼隱藏文件和其他的源代碼)和一個為每個被請求的 ASPX 頁而創(chuàng)建的臨時程序集。在有些情況下,編譯器優(yōu)化(例如批處理)會引起將臨時 ASPX 頁編譯到同一個程序集中。在任一種情況下,每個 ASPX 頁都編譯到一個臨時程序集中,這樣它可以加載到 ASP.NET 運行庫。
雖然這種模型有優(yōu)點,但它也有兩個主要缺點。首先,ASPX 頁必須要以人們可以閱讀的形式部署到 Web 站點。如果開發(fā)人員使用代碼內(nèi)聯(lián) 模型,這意味著,一些(或所有)的業(yè)務(wù)邏輯也可以部署在生產(chǎn)服務(wù)器上。雖然沒有將 IIS 和 ASP.NET 配置為公開原始的 ASPX 頁,但聰明的攻擊者仍可以通過任何攻擊(該攻擊打開到 Web 服務(wù)器的通道)來訪問這些文件。其次,第一次有人請求某 Web 頁時,響應(yīng)速度將比正常速度慢一些,原因在于 ASP.NET 運行庫必須VS2003與VS2005編譯 ASPX 頁。 #t#
這整個過程中,開發(fā)人員擁有的唯一控制權(quán)是決定是否批編譯 ASPX 頁。在 ASP.NET 1.x 中,可以通過修改
ASP.NET 2.0 中的編譯
ASP.NET 2.0 為 Web 應(yīng)用程序提供三種不同的編譯模型:
普通 (ASP.NET 1.x) — 在一個普通的 ASP.NET Web 應(yīng)用程序中,代碼隱藏文件被編譯到一個程序集并存儲在 /bin 目錄中。根據(jù)要求編譯 Web 頁 (ASPX)。該模型對大多數(shù) Web 站點都運行得不錯。但是,編譯過程使得第一次請求 ASP.NET 頁時的速度比隨后的請求速度緩慢。ASP.NET 2.0 繼續(xù)支持這種編譯模型。
部署預(yù)VS2003與VS2005編譯 — ASP.NET 2.0 的一種新功能,允許在部署前對項目進行完整編譯。在完整編譯中,所有的代碼隱藏文件、ASPX 頁面、HTML、圖形資源以及其他的后端代碼都被編譯到一個或多個可執(zhí)行程序集中,這取決于應(yīng)用程序的大小和編譯設(shè)置。這些程序集包含所有的已編譯 Web 站點代碼,而資源文件和配置文件被復(fù)制,沒有做修改。這種編譯方法以犧牲修改部署后 Web 站點的能力為代價,提供了最好的性能和安全性。如果您使用高可見或高安全的 Web 站點,這種選項是最終部署的最好選擇。但是,如果您正在構(gòu)建一個運行局部 Intranet 的小站點,并且更改站點非常頻繁,那么完整預(yù)編譯可能有點過分。 #t#
ASP.NET 2.0 編譯模型也允許預(yù)編譯應(yīng)用程序的所有代碼隱藏文件并且仍可以更新代碼。可以將代碼隱藏文件和原始的 .ASPX 文件(都是局部類)編譯到一個預(yù)編譯類中(頁面的基類)。如果選擇在運行時編輯 .ASPX 文件,只需重新編譯頁面即可。
完整的運行時VS2003與VS2005編譯 — 在部署預(yù)編譯的另一個極端,ASP.NET 2.0 提供一種在運行時編譯整個應(yīng)用程序的新機制。也就是說,可以將未編譯的代碼隱藏文件和其他相關(guān)的代碼放在 \app_code 目錄中,并讓 ASP.NET 2.0 創(chuàng)建并維護對程序集的引用,這些引用將在運行時根據(jù)這些文件生成。這種選項以在服務(wù)器上存儲未編譯代碼為代價,在更改 Web 站點內(nèi)容方面提供了最大的靈活性。