Inherts
??? 在http://mqingqing123.cnblogs.com/archive/2006/01/14/317162.html
里,我介紹了CodeFile來取代Codebehind,可能你會感覺疑惑:ASP.NET工作組花費了很大的時間建立了與.NET1.1不同的后臺文件模型,為什么沒有更改.NET1.1的Inherits呢?
其實,我感覺是.NET2.0設計時主要為了和ASP.NET1.1的兼容,才不得不使用Inherits。
??? 對于熟悉ASP.NET1.1并一直使用VS.NET2003的用戶來說,他們已經習慣了.NET1.1的web開發模型,這種“習慣”并不僅僅意味這雙擊Button,系統直接定位到Button按鈕的事件處理中,更為主要的是習慣了.NET1.1在部署WEB應用程序的方便:在部署應用程序里,當您將本地開發的程序上傳到ISP供應商為你提供的空間里時,您僅僅需要將*.aspx和bin文件夾下的*.DLL文件拷貝到你的空間就可以了,而對于類似*.aspx.cs和*.aspx.resx您可以忽略不計。
??? 如果您以后想升級應用程序也非常簡單,只要將升級后的DLL文件覆蓋原來的DLL文件即可。
??? 然而,在ASP.NET2.0里,正如上篇文件介紹的,*.aspx文件和*.aspx.cs文件都是不完全類(partial class),這就使得想在部署web應用程序前預先編譯 *.aspx.cs變得不可能---這是由于這個條件的限制使得ASP.NET2.0默認是不能夠將后臺文件編譯為二進制的DLL文件的。所以web開發人員在部署.NET2.0的應用程序時,只能夠拷貝所有的源代碼。
??? 因此,當您使用VS.NET2005進行web開發時,默認的,如果您需要將生成的源代碼(*.aspx.cs)連同布局文件(*.aspx)一同拷貝到服務商給你提供的web空間里。
??? 現在,您是不是對ASP.NET2.0的模型感覺到遺憾?至少我是,看看類似CommunityStarter、blogs的源代碼,他們的源文件是如此的多,如果您拷貝到服務器給你提供的空間,需要非常的費時,而在.NET1.1里,我僅僅需要拷貝幾個DLL文件就可以了,看來ASP.NET2.0的框架確實存在很大的局限性。
??? 不過,別著急,問題出現了總需要解決,這個解決辦法就是擴展:ASP.NET1.1的Page指令里也就那幾個主要的屬性,進入CodeBehind已經由CodeFile取代,那么微軟的那些程序員就只好拿Inherits開刀--繼續保留Inherits以便和.NET1.1兼容。----這應該就是為什么.NET2.0仍然保留Inherits關鍵字的原因。
??? 但是接下來還有一個問題:對于同樣是.ASPX文件,我們知道.NET1.1的頁面可以再.net2.0里運行,那么.NET框架怎么識別用戶開發的*.ASPX頁面是.NET1.1版本的還是.NET2.0版本的呢?
??? 這個問題就是由Code*解決,如下:
(1)如果您在Page指令里使用了 CodeFile屬性,.NET框架自動認為您采用的是.NET2.0技術,后臺文件也默認是不完全類
(2)如果您在Page指令里使用了CodeBehind屬性,.NET框架自動認為您采用的是.NET1.1技術,后臺文件的類直接作為頁面的基類
(3)還有一個默認的,就是您的*.aspx里即沒有CodeFile也沒有CodeBehind,那么系統如何認為呢?在這種情況下系統仍然認為您是使用.NET1.1的框架技術,其實本人感覺這還是為了考慮兼容性,因為.NET1.1版本里就可以省略CodeBehind,如果讓.NET1.1和.NET2.0高度兼容就必須始終以.NET1.1為目標。
??? 知道了頁面如何區分頁面后,解下來繼續上面的問題,如何解決部署難的問題。在ASP.NET2.0里,提供了一個新命令aspnet_compiler.exe,默認的您可以在系統盤里找到,例如我的winXP系統里的默認位置在 c:\windows\microsoft.net\framework\版本號 目錄里。
??? aspnet_compiler.exe的使用較為復雜以后會介紹,以后會介紹,在用它之前先介紹它的基本功能。aspnet_compiler.exe會將文件全部編譯為二進制文件:清注意這里是全部,也就是使用該編譯器后*.ASPX和*.ASPX.CS全部編譯為*.DLL,原因還是前面介紹的那個規則:不管什么時候,要編譯為DLL文件,都必須提供完整的類。
??? 現在您可以知道ASP.NET2.0的高明了吧,在部署ASP.NET應用程序時,您可以有三種方式:
(1)傳統ASP.NET1.1方式:布局代碼*.ASPX和編譯后的后臺bin文件夾下的DLL文件(部分代碼+部分二進制)
(2)默認ASP.NET2.0方式:所有布局代碼和所有后臺文件以源文件的形式存在(全部源代碼)
(3)改進后的ASP.NET2.0模式:此時所有布局代碼*.ASPX和后臺文件*.ASPX.CS都是以DLL的形式存在。(全部二進制)
??? 最后,還要說一下全部編譯后的二進制的問題,當你編譯后可以發現有一個default.aspx文件,可能你會問既然全部是DLL文件為什么還要default.aspx文件呢?這個文件也沒有內容,會不會是多余的?
??? 要理解這個問題就需要轉到IIS了,換句話說這就不再是ASP.NET2.0的工作范疇了。
對于客戶端請求,IIS首先會根據映射檢查您所請求的文件存在不存在,如果不存在就直接提示您所請求的文件沒有找到。??? 可以看到此時ASP.NET2.0框架還沒有接管呢,解決這個文件最簡單的方法就是不用檢測文件是否存在,參考下圖(,默認檢查文件是否存在是選中的,更為詳細的原因,可以參考.BLOGS配置),但是這個步驟雖然不復雜,可以對于許多應用程序來說都需要更改顯然非常不現實,現在好了只要有了DEFAULT.asxp不用更改IIS配置也可以了
所以,默認還是需要default.aspx的。
總結
- 上一篇: URLEncoder编码
- 下一篇: 空间三维技术重现“山水林田湖草”管理沙盘