asp.net|程式
新版本平台的推出總是伴隨著許多壓力,以及人們對期待已久功能的興奮之情。開發人員喜歡利用新技術建立應用程式,不過,在將現有的可靠應用程式由舊版本平台移植到最新最完善版本的過程中,總會遇到一些困難。
本周,我來討論將在ASP.NET 1.1中建立的網路應用程式移植到2.0版本過程中可能出現的一些問題。
ASP.NET 2.0
新版的ASP.NET 2.0不只是一次升級——它是一次重大的技術更新,因為它改變了ASP.NET應用程式的設計、編譯及配置方式。微軟意識到,現在還存在大量的ASP.NET 1.1程式,因此2.0旨在讓繼承應用程式無故障地運行。另一方面,技術升級也產生了將現有應用程式轉換到2.0平台的需要。考慮到上述問題,我們來討論一下這兩個版本之間的區別,以及在轉換過程中可能會遇到的問題。
版本變化
雖然ASP.NET 2.0針對1.1進行了許多改變,但某些變化對於項目轉換有著重大的影響。下面的列表簡單概括了一些主要改變:
- 程式碼後置模式:ASP.NET 2.0引入了部分類的概念,而一個類能夠跨越多個類檔案。這是Visual Studio 2005應用的一項主要功能,它將系統產生的程式碼與使用者代碼分離開來。這避免了你在閱讀原始碼時遇到系統產生代碼的情況。部分類方法降低了無意編輯系統代碼並導致更小的程式碼後置檔案的風險。
- 目錄:ASP.NET 2.0增加了許多特殊的目錄,而1.1僅有一個必要的bin目錄。這些新目錄大都以App_為首碼,如App_Code、App_Date、App_ GlobeResources和App_LocalResources,bin目錄依然與一個主題目錄一同存在。新增目錄是2.0取消專案檔的主要手段。
- 刪除專案檔:ASP.NET與Visual Studio 2005使用專案檔的日子一去不複返了。項目現在變成了完整的網路項目目錄,這與1.1有了很大的不同,並可能引起後面提到的移植問題。
- 編譯模式:在1.1中,所有的代碼被編譯到bin目錄中的一個集合中。在2.0中,這個集合被分割成幾個集合。這些集合可以在空閑時建立,或預先編譯。每個ASP.NET目錄,如App_Code和App_Data,以及Web Forms、User Controls等都有各自的集合。這是應用程式結構方面的重大變化,它為向使用者交付應用程式提供更多配置選項。
- 應用程式配置:1.1版應用程式的配置相當簡單,你只要移動內容檔案以及必要的集合檔案,再複製並粘貼就可完成,並沒有多少選擇的餘地。2.0為應用程式配置提供各種選擇。例如,你可以選擇預先編譯代碼再配置它;或不預先編譯而使用其它方法。另外,你還可以鎖定已配置的內容檔案,防止在配置後再進行修改(這與1.1有很大不同)。
上表詳細說明了ASP.NET 1.1與2.0的主要差異,以及它們對應用程式移植可能造成的影響。現在我們再進一步討論可能出現的問題。
應用程式轉換
上一部分說明的新舊版本間的主要差異為轉換應用程式時可能遇到的問題提供了一些線索。下表著重強調在將一個應用程式移植到新的ASP.NET 2.0平台時需要注意的問題:
- 在轉換前,你必須確定應用程式在1.1中能夠正常運行。在一個多功能項目中,在轉換前應進行備份。
- 2.0中刪除了專案檔,這與1.1有很大不同。在2.0中,所有的引用被轉移到它們自己的目錄中。另外,網路專案檔夾現在變成項目。因此,在2.0中,需要將舊版1.1中有多個地址的項目劃分成單獨的項目。在轉換前必須劃分這些項目。
- 2.0的新目錄結構需要1.1中用到的資源和其它組件,你需要將它們轉移到新目錄中。
- .NET Framework已由1.1升級到2.0,因此2.0可能不再支援1.1中的一些功能(如類或它們的方法和/或屬性)。
轉換嚮導
微軟同時考慮到項目轉換問題。Visual Studio 2005中包含一個轉換嚮導,協助你進行項目轉換。
在轉換前,Visual Studio轉換嚮導首先要求你對現有應用程式進行備份(這是個非常不錯的主意)。接下來,它執行轉換,並在完成轉換後顯示一個轉換日誌。在新版本號碼中被替代或取消的.NET Framework功能是轉換過程中可能出現的常見問題。
列表A中的資訊指出,一項功能已被新版本中的另一功能代替,因此我必須手工修改代碼。不同的應用程式在轉換過程中可能出現各種問題。你需要單獨解決每一個問題,做出必要的改變,才能充分利用2.0平台。
逐步轉換
不管哪種轉換,最好是逐步、有條理地進行。沒有必要進行快速轉換。ASP.NET 2.0中增加了大量新功能,可以方便地建立強大的解決方案,但當你將舊版ASP.NET 1.1應用程式轉換到新平台時,必須考慮到這些改變。記住本文所討論的這些變化,利用轉換嚮導,一步步地轉換到新平台。
Tony Patton擁有豐富的Java、VB、Lotus及XML方面的知識,是一個專業的應用程式開發人員。