LeavingMe.net

ASP.NET 2.0的部署与1.1的区别

2008-01-14 01:17:00

对于熟悉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\版本号 目录里。

    ASPnetcompiler.exe的使用较为复杂以后会介绍,以后会介绍,在用它之前先介绍它的基本功能。ASPnetcompiler.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的。 

参考了其它的资料,本人的理解,还可以把asp.net程序编译成aspx文件和dll文件共存的方式,方法是在aspnet_compiler.exe 后加上-u参数。具体这个方法的开关参数的使用方法,请参考另一篇文章。

[陈源](http://leavingme.cnblogs.com/) 2008-01-14 01:17 [发表评论](http://www.cnblogs.com/leavingme/archive/2008/01/14/1166229.html#Feedback)
comments powered by Disqus