"网站"是以文件目录为基本单位管理的,文件夹中的所有文件都是项目的一部分,直接把iis设成开发目录就可以运行,是非常适合web开发的一种模式。它没有项目文件,不需要编译,方便调试。是vs2005新推出的一种模式。
"应用程序"是以项目为管理基本单位的。是为了组件化开发等准备的,有项目文件,需要编译发布,适合团队开发使用,但是对web的开发模式并不十分适应。主要是为了兼容win的开发方式,是一种遗留模式
一些开发者认为Web Site 项目使用起来更加自然,方便。而另一些开发者则比较喜欢清晰明了的定义项目中的使用到的资源和文件,而不是象Web Site中,只要是在网站根目录下的文件都是网站的资源(尽管Web Site中也有排除文件的功能,但是是通过修改文件的后缀来实现的,和Web Application中记录到项目文件中的做法是不一样的)。
下面是Web Site 和 Web Application 在不同情况下的比较。
Option or Task
Web Application Projects
Web Site Projects
将大型 Visual Studio .NET 2003 应用程序迁移到 Visual Studio 2005。
X
希望不使用代码分离技术。
X
希望在开发中可以动态编译页面,不需在每个文件修改,保存后,手动编译,而只是通过刷新页面就看到修改的效果。
X
需要控制项目生成的程序集的名字、版本、输出位置等信息。
X
需要针对每个页面生成独立的程序集。
X
使用独立的类来引用页控件类和用户控件类。
X
使用多个 Web 项目生成 Web 应用程序。
X
在编译过程中添加预先生成和后期生成步骤。
X
需要直接使用独立的文件夹,作为web 项目时,并且不创建项目文件。
X
下面的表格列出了Web Application 和 Web Site 的重要区别。
情况
Web Application Project
Web Site Project
工程定义
只有在 Web Application的解决方案中引用的文件才是项目的一部分。这些文件也显示在解决方案资源管理器中,并在生成期间进行编译。由于存在项目文件,因此有些方案更加容易实现。例如,可以将一个 ASP.NET 应用程序细分为多个 Visual Studio 项目。还可以轻松地从项目和源代码中排除文件。
Web site 使用文档结构管理项目文件。他不包括项目文件,文件夹中的所有文件都是项目的一部分
适用于现存不包含项文件的网站目录。
编译和生成输出
项目中所有的程序代码文件,和独立的文件都被编译成为一个程序集,保存在bin文件夹中,可以指定程序集的名字、版本、输出位置等信息
在Web Site 项目中使用生成命令时,并不会生成程序集 ,而只是对Web Site进行验证 。在运行Web Site的时候,由asp.net的动态编译部署的页面,类源文件。
同时也可以对站点进行预编译以提高性能,在预编译中使用的是和动态编译同样的技术。
Asp.net预编译有2中模式. batch mode (the default) and fixed-names mode. batch mode 中生成一个程序集。fixed mode 每个页面,用户控件都生成独立的程序集。
开发
在需要运行和调试程序之前需要进行编译整个项目,但是通常Web Application编译速度很快,因为使用了增量编译模式,仅仅只有文件被修改后,这部分才会被增量编译进去。
由于使用了动态编译机制,并且编译到不同的程序集,所以访问或者调试特定页面时,不需要编译整个项目编译成功。
生成命令会对整个项目进行验证,但是速度较慢,所以建议在开发和调试的过程中,仅使用编译当前页面。
部署
由于所以代码文件都生成为一个程序集,所以只需要把程序集和.aspx等页面文件部署到服务器上。
.aspx文件只有在被浏览器访问到的时候才进行编译。
每次更新程序集的时候,相当于替换了所有的页面代码.
使用发布命令可以把.aspx文件和后台代码文件都编译到程序集中,如果选择了updateable publish option 时,只是对后台代码进行编译 。
默认模式会针对每个文件夹生成一个程序集.固定名称模式,会针对每个页面,控件生成一个程序集 ,不过可能造成存储空间的额外负担。
从Visual Studio .NET 2003 升级
由于和.net 2003工作原理相同,基本不需要太多的操作。
需要使用升级向导,并且需要其他的一些额外操作。
。
WebApplication编程模型的优点:ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
●网站编译速度快,使用了增量编译模式,仅仅只有文件被修改后,这部分才会被增量编译进去。ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
●生成的程序集ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
WebSite:生成随机的程序集名,需要通过插件WebDeployment才可以生成单一程序集WebApplication:可以指定网站项目生成单一程序集,因为是独立的程序集,所以和其他项目一样可以指定应用程序集的名字、版本、输出位置等信息ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
●可以将网站拆分成多个项目以方便管理ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
●可以从项目中和源代码管理中排除一个文件ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
●支持VSTS的Team Build方便每日构建ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
●更强大的代码检查功能,并且检查策略受源代码控制ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
●可以对编译前后进行自己规定的处理ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
●对App_GlobalResources 的Resource强类支持ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
●直接升级使用VS2003构建的大型系统ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
WebSite编程模型的优点:ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
●动态编译该页面,马上可以看到效果,不用编译整个站点(主要优势)ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
●同上,可以使错误的部分和使用的部分不相干扰ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
●可以每个页面生成一个程序集ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
●可以把一个目录当做一个Web应用来处理,直接复制文件就可以发布,不需要项目文件ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
●可以把页面也编译到程序集中ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
两种编程模型的互相转换:ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
VS2005 SP1内置了转换程序,可以非常方便的从WebSite转换到WebApplicationZC¸Bej?àbbs.51aspx.comæ'âoD"]é
只需要复制文件,右键执行“转换为Web应用程序”即可。ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
未查到有专门的反向转换工具,但比较后发现如果转换也非常简单。ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
*.designer.csZC¸Bej?àbbs.51aspx.comæ'âoD"]é
*.aspxZC¸Bej?àbbs.51aspx.comæ'âoD"]é
*.ascxZC¸Bej?àbbs.51aspx.comæ'âoD"]é
*.masterZC¸Bej?àbbs.51aspx.comæ'âoD"]é
删除所有*.designer.csZC¸Bej?àbbs.51aspx.comæ'âoD"]é
将*.aspx、*.ascx、*.master页面文件中的 Codebehind="FileList.aspx.cs" 批量替换成 CodeFile="FileList.aspx.cs"ZC¸Bej?àbbs.51aspx.comæ'âoD"]é
总之,大网站比较适合用WebApplication项目,小网站比较适合用WebSite项目。