ASP.NET 2.0來了! 在我們為ASP.NET 2.0的新特性感到激動的同時,我想很多ASP.NET開發人員非常關心這樣一個問題:ASP.NET 2.0的相容性怎麼樣?ASP.NET 1.1開發的程式能直接運行在ASP.NET 2.0上嗎?
在SDK文檔中,對於.NET Framework 2.0的相容性有這樣描述的:“The .NET Framework provides a high degree of support for backward compatibility. For example, most applications created using version 1.0 will run on version 1.1 and applications using version 1.1 will run on version 2.0.”。
看了這樣的描述,我想:如果ASP.NET 1.1開發的程式真能直接運行在ASP.NET 2.0上,那就太棒了,但ASP.NET 2.0相對於1.1的變化這麼大,做到這樣的相容難度很大,微軟一向對向後相容很重視,我們應該有所期望。如果相容性不理想,從ASP.NET 1.1 遷移到ASP.NET 2.0會帶來很大的成本與風險。自己開發的程式可以在ASP.NET 2.0上重新編譯,可程式中所用的第三方組件呢?
那我們拿部落格園的程式做個實驗吧。對程式不作任何修改,直接在IIS管理器中將ASP.NET切換至2.0, 並將*.*的映射改為ASP.NET 2.0。
程式安裝在原生blog虛擬目錄中,首先我訪問地址:http://localhost/blog(由於建立了萬用字元映射,IIS不會把地址改為http://localhost/blog/default.aspx), 出現第一個錯誤:
There is no build provider registered for the extension '. You can register one in the <compilation><buildProviders> section in machine.config or web.config. Make sure is has a BuildProviderAppliesToAttribute attribute which includes the value 'Web' or 'All'.
在ASP.NET 1.1中,這樣訪問是正常的,由於建立了萬用字元映射,請求由web.config中 <add verb="*" path="*" type="Dottext.Common.UrlManager.UrlReWriteHandlerFactory,Dottext.Common" />處理。而在ASP.NET 2.0 中,請求的資源需要有一個buildProvider來處理(在<buildProviders>中進行設定),而訪問http://localhost/blog,並沒有包含檔案名稱,ASP.NET 2.0認為是一個副檔名為空白的檔案,找不到相應的buildProvider來處理(如果是aspx檔案,預設的buildProvider是System.Web.Compilation.PageBuildProvider),所以會產生這樣的錯誤。 我想應該可以通過在<buildProviders>中增加一個處理這類請求的buildProvider來解決這個問題,可是我在設定時遇到了一個問題:extension該如何設定?我嘗試了以下幾種設定都不行:
<add extension=".*" type="System.Web.Compilation.PageBuildProvider" />
<add extension="*" type="System.Web.Compilation.PageBuildProvider" />
<add extension="*.*" type="System.Web.Compilation.PageBuildProvider" />
<add extension="" type="System.Web.Compilation.PageBuildProvider" />(這個設定根本不允許)
不知是我沒有找到設定的方法,還是extension本來就不支援萬用字元?如果是後者,這就是一個相容性問題。但這種情況是比較特殊的,一般ASP.NET程式中不會遇到這樣的情況。如果真的無法解決這個問題,那類似.Text這樣使用萬用字元映射的方式將成為曆史。如果誰知道解決方案,希望能得到您的指點。