轉眼間,距離微軟推出.net平台已經4年了,.net也經歷了從1.0 到1.1 再到2.0的升級。 由於asp.net 2.0 和vs 2005 IDE的各種優越特性的吸引,大夥都忙著學習2.0,將專案升級至vs 2005 下面開發。 但實際上,許多項目由於種種原因,無法升級到新版本。隨著時間的變遷,舊版的專案維護問題越來越頭痛。雖然.net誕生時間不長,但4年的時間足以累積一量的專案。
我手上就有個用vs.net 2002開發的項目,由於種種原因一直沒有升級(主要是因為該項目在vs.net 2003出來之前已經良好運行了一段時間,並且伺服器上的其他asp.net程序無法適應.net 1.1的安全性要求。
當初公司開發平台升級時,在電腦上同時安裝vs.net 2002 和vs.net 2003, 暫時性的解決了不同版本的專案的維護。再後來,專案過了維修期了,很久沒更新了,我電腦也重裝了,vs.net 2002就徹底掃地出門了。但到了2005年,客戶每隔1,2個月就提出修改要求,而且要快,沒辦法,客戶太牛B,過了維護期也要改。但問題來了,沒有vs 2002,無法編譯。
在電腦上裝個.net framework 1.0, 使用手工方式呼叫csc 編譯修改後的程式碼,非常麻煩,專案有一堆引用,寫命令列很繁。特別是項目有很多資料夾時更痛苦。也考濾過寫個程式編譯,但我懶,一直沒實現。
今天又碰上要修改程序,突然想起很早的時候(2002年)使用過一次@Page指令的Src 屬性,使用此屬性,asp.net將採用自己的編譯模型而不是使用vs.net IDE的CodeBehind方式,程式碼無需編譯成dll 便可發布,造訪網站時,asp,net會自動將aspx檔和.aspx.vb 檔案一起編譯。 這種方式的缺點主要有兩個:1、 程式碼檔案(.vb) 必須發佈到伺服器上, 2、vs.net IDE 不支援。 因為第二個問題的原因,後來放棄使用了,這事也就忘了。 現在正愁沒辦法編譯程式呢,只要能讓修改後的程式碼生效,其他的缺點都不考濾了。 反正所有的原始碼都發佈到伺服器上了。 我在@Page 指令中加了個Src屬性,使用的值與CodeBehind 屬性的值相同,指向程式碼檔案。再將.vb 檔案中的程式碼修改完畢。刷新,修改生效,維護完成。爽啊。以後就這麼乾了。由於vs.net IDE 不支持,MSDN上也是一筆帶過,未必有很多人知道.net具有這種編譯模型。現在將其共享出來,如果有人也正經受我一樣的痛苦,您也可以考濾在頁面中添加Src,呵呵,簡單快捷,改完代碼就生效,不用再絞盡腦汁找工具編譯了。
總結: 包括我在內的許多人,都更喜歡將程式編譯成dll,感覺這才更像一個發布的軟體。其實,採用「將所有原始碼發佈到伺服器,運行時完整的編譯程式碼」的方式非常不錯,大大簡化日後的維護工作。很多公司為客戶作的專案其實沒必要對客戶隱藏原始碼。在這種情況下,使用這種方式為以後的維護工作帶來巨大的好處,無論.net 升級了n次,不管你電腦上是否裝有相應版本的開發工具,你都無需擔心,用記事本都可以搞定一切。
注意: 所有版本的asp.net都支援此編譯模式,但vs.net 2002和2003的IDE不支持,無法開啟設計視圖。 剛出來的vs 2005 IDE支援這種編譯模式。 使用Src 屬性時,CodeBehind屬性不再需要了,但建議你仍然保留,如果你突然需要回到計視圖,它還可以幫你的忙。 Inherits 屬性也不需要,但強烈建議你不要刪除它,因為如果你在aspx檔案的控制項宣告中直接綁定了事件(如: OnClick="....") ,沒有Inherits屬性會報錯。
出處:cwbboy BLOG