小试ASP.NET 2.0的兼容性2007-05-10ASP.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这样使用通配符映射的方式将成为历史。如果谁知道解决方法,希望能得到您的指点。