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這樣使用通配符映射的方式將成為歷史。如果誰知道解決方法,希望能得到您的指點。