Asp.net1.0 升級ASP.NET 2.0 的幾個問題總結
作者:Eve Cole
更新時間:2009-06-30 16:06:42
這幾天升級了一下原來的1.1項目,發現了一些問題,總結一下放在這裡,也提醒還沒來得及升級或準備升級的朋友,升級的過程中少走彎路,少浪費時間。
1. Global.asax檔案的處理形式不一樣,轉換後將出現錯誤,在vs2003中Global.asax具有代碼後置文件,2.0下, 將代碼分離文件移到App_Code 目錄下,以便使其自動變為可通過應用程式中的任意ASP.NET 頁面存取。 「Code-behind」屬性將從ASAX 檔案的指令中刪除。 vs2005則直接把程式碼寫在Global.asax。所以需要刪除轉換過來的檔案重新加入,並把對應的程式碼copy過來。
2.2.0沒有了專案文件。 在1.1 應用程式中,專案檔案包含產生設定、對外部組件的引用以及專案中的檔案清單。而在2.0 應用程式中,不再需要版本設定和檔案列表,因為Web 專案目錄下的所有檔案都被視為Web 專案的一部分。
3.代碼分離模式。
在ASP.NET 1.1 中,程式碼分離模式使內容(例如test.aspx)與程式碼(例如test.aspx.cs)分離。內容頁面從程式碼分離頁面繼承而來,程式碼分離頁麵包含使用者和設計器產生的程式碼。
ASP.NET 2.0 透過使用局部類別來增強程式碼分離模式,使用partial 關鍵字可以將單一類別的程式碼分隔到兩個獨立的檔案中。它允許一個類別跨越多個檔案。在新的程式碼分離模式中,內容頁面從編譯的類別繼承而來,它由對應的程式碼分離頁面以及自動產生的存根檔案組成,存根檔案用於為內容頁面中使用的控制項定義欄位聲明。此項變更使自動產生的程式碼與使用者的程式碼分離,並且使程式碼分離頁面顯著變小且更加簡潔。局部類別結構也降低了由於編輯設計器產生的程式碼而不小心破壞頁面的風險。
如果出錯請檢查是否有partial 關鍵字,否則加入partial 關鍵字。
4.語法檢查。 asp.net1.1程序,編譯時不會檢查aspx、aspcx等檔案中的語法錯誤,而vs2005編譯時會檢查專案中所有的aspx、aspcx等檔案中的語法,所以如果有語法錯誤,會導致編譯無法通過。
5.控制項聲明。如果在.aspx 頁面上聲明了所有控件,則從程式碼分離檔案中刪除所有控件聲明,否則報錯:重複定義。
6. (僅限於C#)將事件掛鉤程式碼從程式碼分離檔案的InitialzeComponent 函數移到.aspx 頁面中。請注意,此操作不適用於自動呼叫的事件,包括Page_Init、Page_Load、Page_DataBind、Page_PreRender、Page_Unload、Page_Error、Page_AbortTransaction 和Page_CommitTransaction。
7. 部署方式(預編譯、完整編譯、可更新網站等)。在1.x 中,Web 應用程式是作為一個大型程式集而預先編譯和部署的。內容頁面(*.aspx)不在伺服器上編譯,但可以在伺服器上編輯。透過新的頁面編譯模式和目錄結構,您就可以使用多種不同的配置來部署ASP.NET 2.0 應用程式。一種情況,您可以預先編譯所有的ASPX 頁面並部署由完全編譯好的程序集組成的Web 應用程式。在這種模式下,您不能在伺服器上輕鬆地更改該應用程式。另一種情況,您可以在不預先編譯任何程式碼的情況下部署應用程式。在這種配置下,您可以直接在伺服器上變更該應用程式中的.aspx 頁面、程式碼分離檔案或其他任何程式碼。當使用者請求伺服器上的頁面時,頁面將被動態編譯。
8.將.aspx 頁面中的所有CodeBehind 屬性變更為CodeFile 屬性
CodeBehind: 指定包含與頁關聯的類別的已編譯檔案的名稱。該屬性不能在運行時使用。
提供此屬性是為了與先前版本的ASP.NET 的相容,以實現程式碼隱藏功能。在ASP.NET 2.0 版中,應改用CodeFile 屬性指定該來源檔案的名稱,同時使用Inherits 屬性指定該類別的完全限定名稱。
CodeFile
指定指向頁引用的程式碼隱藏檔案的路徑。此屬性與Inherits 屬性一起使用可以將程式碼隱藏原始檔案與網頁相關聯。此屬性僅對編譯的頁有效。
9.將所有獨立的程式碼檔案和AssemblyInfo.cs都移到App_Code 目錄下。
但在執行轉換精靈之後,您可能會發現某些程式碼分離檔案(例如,*.aspx.cs 或*.ascx.vb)被移到App_Code 目錄下。這表示程式碼分離檔案的內容頁面含有格式不正確的Codebehind 指令,並且沒有正確設定。也就是說,轉換精靈不能確定該程式碼分離檔案是否實際綁定到某個特定的.aspx 頁面。
10.Web 服務在ASP.NET 1.x 中,Web 服務(.asmx) 會自動分割到空白標題頁面(.asmx) 和包含實際方法的程式碼分離檔中。
Asp.net2.0下:
• 將程式碼分離類別移到App_Code 目錄下,以便使其自動變成可透過應用程式中的任意ASP.NET 頁面存取。
• 更改.asmx 檔案中的CodeBehind 屬性,以便指向新位置。
(請注意,程式碼分離檔案不使用局部類,因此繼續使用CodeBehind 屬性。)
• 將所有的預設、Friend 和Internal 範圍的宣告更改為Public。
在1.1到2.0的升級過程中,你遇到過什麼樣的問題呢?可以寫下來讓大家共同學習,少走彎路。