当我在Visual Studio中启动一个新的ASP.NET项目时,我可以创建一个ASP.NET Web应用程序,或者我可以创建一个ASP.NET Web站点.
ASP.NET Web应用程序和ASP.NET Web站点之间有什么区别?为什么我会选择一个而不是其他?
根据我使用的Visual Studio版本,答案是否有所不同?
网站:
该网站项目被编译的飞行.你最终得到了更多的DLL文件,这可能是一个痛苦.当您在一个目录中有页面或控件需要引用另一个目录中的页面和控件时,它也会出现问题,因为其他目录可能尚未编译到代码中.另一个问题可能是出版.
如果没有告诉Visual Studio不断重复使用相同的名称,它将为页面始终生成的DLL文件提供新名称.这可能会导致包含相同类名的DLL文件的几个密切副本,这将产生大量错误.Web站点项目是在Visual Studio 2005中引入的,但事实并非如此受欢迎.
Web应用程序:
在Web应用程序项目创建为一个附加的和现在存在作为Visual Studio 2005的主要区别是在Web应用程序项目的设计工作类似与Visual Studio 2003年它将附带的Web项目SP 1的一部分在构建时将应用程序编译为单个DLL文件.为了更新项目,必须重新编译它并发布DLL文件以进行更改.
Web应用程序项目的另一个不错的功能是从项目视图中排除文件要容易得多.在"网站"项目中,您排除的每个文件都使用文件名中的excluded关键字重命名.在Web应用程序项目中,项目只是跟踪项目视图中包含/排除的文件而不重命名,使事情变得更加整洁.
参考
文章ASP.NET 2.0 - Web站点与Web应用程序项目也给出了为什么使用一个而不是另一个的原因.以下是它的摘录:
您需要将大型Visual Studio .NET 2003应用程序迁移到VS 2005吗?使用Web应用程序项目.
您想在不创建项目文件的情况下打开和编辑任何目录作为Web项目吗?使用网站项目.
您需要在编译期间添加预构建和后构建步骤吗? 使用Web应用程序项目.
您需要使用多个Web项目构建Web应用程序吗?使用Web应用程序项目.
您想为每个页面生成一个程序集吗?使用网站项目.
您更喜欢动态编译和处理页面而不在每个页面视图上构建整个站点?使用网站项目.
您更喜欢单页代码模型到代码隐藏模型吗?使用网站项目.
Web应用程序项目与Web站点项目(MSDN)解释了Web站点和Web应用程序项目之间的差异.此外,它还讨论了在Visual Studio中进行的配置.
Web站点是您部署到ASP.NET Web服务器(如IIS)的内容.只是一堆文件和文件夹.网站中没有任何内容可以将您与Visual Studio联系起来(没有项目文件).代码生成和网页编译(例如.aspx,.ascx,.master)在运行时动态完成,框架检测到这些文件的更改并自动重新编译.您可以在特殊的App_Code文件夹中放置要在页面之间共享的代码,也可以预编译它并将程序集放在Bin文件夹中.
Web应用程序是一个特殊的Visual Studio项目.与Web站点的主要区别在于,在构建项目时,所有代码文件都编译为单个程序集,该程序集位于bin目录中.您不会将代码文件部署到Web服务器.您可以将它们放在任何位置,而不是像在类库中那样放置共享代码文件的特殊文件夹.由于Web应用程序包含不打算部署的文件(例如项目和代码文件),因此Visual Studio中有一个" 发布"命令可将网站输出到指定位置.
部署共享代码文件通常是个坏主意,但这并不意味着您必须选择Web应用程序.您可以拥有一个引用类库项目的Web站点,该项目包含Web站点的所有代码.Web应用程序只是一种方便的方法.
本主题特定于.aspx和.ascx文件.在不使用代码隐藏文件的ASP.NET MVC和ASP.NET Web页面等新应用程序框架中,此主题越来越相关.
通过将所有代码文件编译为单个程序集(包括.aspx页面和.ascx控件的代码隐藏文件),在Web应用程序中,您必须为每个小的更改重新构建,并且您无法进行实时更改.这在开发过程中可能是一个真正的痛苦,因为您必须不断重新构建以查看更改,而运行时检测到Web站点更改并自动重新编译页面/控件.
让运行时管理代码隐藏程序集对您来说不那么重要,因为您不必担心为页面/控件提供唯一名称,或者将它们组织到不同的名称空间中.
我不是说部署代码文件总是一个好主意(特别是在共享代码文件的情况下),但代码隐藏文件应该只包含执行UI特定任务的代码,连接事件处理程序等.您的应用程序应该是分层,以便重要的代码总是在Bin文件夹中.如果是这种情况,那么部署代码隐藏文件不应被视为有害.
Web应用程序的另一个限制是您只能使用项目的语言.在网站中,您可以在C#中创建一些页面,在VB中使用一些页面等.不需要特殊的Visual Studio支持.这就是构建提供程序可扩展性的美妙之处.
此外,在Web应用程序中,您不会在页面/控件中获得错误检测,因为编译器只编译您的代码隐藏类而不是标记代码(在MVC中您可以使用MvcBuildViews选项修复此问题),这是在运行时编译的.
由于Web应用程序是Visual Studio项目,因此您将获得Web站点中不具备的一些功能.例如,您可以使用构建事件来执行各种任务,例如缩小和/或组合Javascript文件.
Visual Studio 2010中引入的另一个不错的功能是Web.config转换.这在网站中也不可用. 现在可以在VS 2013中使用网站.
构建Web应用程序比构建Web站点更快,特别是对于大型站点.这主要是因为Web应用程序不编译标记代码.在MVC中,如果将MvcBuildViews设置为true,则它会编译标记代码并获得错误检测,这非常有用.不好的一面是,每次构建解决方案时,它都会构建完整的站点,这可能会很慢且效率低下,特别是如果您不编辑站点.我发现自己打开和关闭MvcBuildViews(这需要一个项目卸载).另一方面,使用网站,您可以选择是否要将网站构建为解决方案的一部分.如果您选择不这样做,那么构建解决方案的速度非常快,如果您进行了更改,则可以始终单击"网站"节点并选择"构建".
在MVC Web应用程序项目中,您可以使用额外的命令和对话框来执行常见任务,例如"添加视图","转到视图","添加控制器"等.这些在MVC网站中不可用.
如果使用IIS Express作为开发服务器,则可以在"网站"中添加虚拟目录.Web应用程序中不提供此选项.
NuGet包还原在网站上不起作用,您必须手动安装packages.config上列出的包Package Restore现在适用于启动NuGet 2.7的网站
网站 =当图形设计者创建网站时使用,程序员只编辑一页或两页
Web应用程序 =在程序员创建应用程序时使用,图形设计人员只编辑一个或两个分页/图像.
网站可以使用任何HTML工具而无需开发人员工作室,因为项目文件不需要更新等.当团队主要使用开发人员工作室并且代码内容很高时,Web应用程序是最好的.
(在编译时Web应用程序中发现了一些编码错误,这些错误在运行时之前在网站中找不到.)
警告: 我多年前写过这个答案,从那时起就没有使用过Asp.net.我希望事情现在已经开始了.
除非您特别需要动态编译的项目,否则请勿使用网站项目.
为什么?因为在尝试更改或了解您的项目时,网站项目会引起您的反响.Visual Studio中的静态类型查找功能(例如查找用法,重构)将永远占用任何合理大小的项目.有关详细信息,请参阅Visual Studio中的堆栈溢出问题慢"查找所有引用".
我真的不明白为什么他们在Visual Studio 2005中放弃了Web应用程序,用于引起痛苦,消耗精神,生产力的痈网站项目类型.
MSDN中有一篇文章描述了这些差异:
比较网站项目和Web应用程序项目
顺便说一句:关于该主题有一些类似的问题,例如:
Web站点与Visual Studio中的ASP.Net Web应用程序 注释:已删除,不再在SO上
网站或webapplication in.ASP.NET
这可能听起来有点明显,但我认为这是一个被误解的东西,因为Visual Studio 2005最初只附带了网站.如果您的项目涉及的网站相当有限且没有很多逻辑或物理上的分离,那么网站就可以了.但是,如果它是真正的Web应用程序,其中包含许多用户添加和更新数据的不同模块,那么您最好使用Web应用程序.
网站模型的最大专业是该app_code
部分中的任何内容都是动态编译的.您无需完全重新部署即可进行C#文件更新.然而,这是一个巨大的牺牲.许多事情都发生在难以控制的封面之下.app_code
由于所有内容都是动态编译的,所以命名空间很难控制,并且默认情况下特定的DLL使用会超出窗口.
Web应用程序模型没有动态编译,但您可以控制我提到的内容.
如果您正在进行n层开发,我强烈推荐Web应用程序模型.如果您正在进行有限的网站或快速而肮脏的实施,则网站模型可能具有优势.
更详细的分析可以在:
Web应用程序项目和Web部署项目在此处
网站或Web应用程序?
来自MCTS自学培训套件考试70-515书:
使用Web应用程序(项目),
您可以创建MVC应用程序.
Visual Studio将文件列表存储在项目文件(.csproj或.vbproj)中,而不是依赖于文件夹结构.
你不能混合使用Visual Basic和C#.
您无法在不停止调试会话的情况下编辑代码.
您可以在多个Web项目之间建立依赖关系.
您必须在部署之前编译应用程序,这将阻止您在其他页面无法编译时测试页面.
您不必将源代码存储在服务器上.
您可以控制程序集名称和版本.
无需重新编译即可在部署后编辑单个文件.
这取决于你正在开发什么.
面向内容的网站的内容会经常变化,网站会更好.
应用程序往往将其数据存储在数据库中,其页面和代码很少发生变化.在这种情况下,最好有一个Web应用程序,其中组件的部署受到更多控制,并且对单元测试有更好的支持.
Compilation
首先,编译有所不同.Web站点未在服务器上预编译,它是在文件上编译的.这可能是一个优势,因为当您想要更改网站中的某些内容时,您只需从服务器下载特定文件,更改它并将此文件上传回服务器,一切都会正常工作.在Web应用程序中,您不能这样做,因为everthing是预编译的,并且您最终只有一个dll.当您在项目的一个文件中更改某些内容时,您必须重新编译所有内容.因此,如果您希望有可能更改服务器上的某些文件,网站是更好的解决方案.它还允许许多开发人员在一个网站上工作.另一方面,如果您不希望代码在服务器上可用,则应选择Web应用程序.此选项对于单元测试也更好,因为在发布网站后创建了一个DLL文件.
Project structure
项目结构也存在差异.在Web应用程序中,您有一个项目文件,就像在普通应用程序中一样.在网站上没有传统的项目文件,你只有解决方案文件.所有引用和设置都存储在web.config文件中.
@Page directive
@Page指令中有一个不同的属性,用于包含与此页面关联的类的文件.在Web应用程序中,它是标准的"CodeBehind",在网站中使用"CodeFile".您可以在以下示例中看到:
Web应用程序:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication._Default" %>
网站:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
命名空间 - 在上面的示例中,您还可以看到另一个区别 - 如何创建命名空间.在Web Application中,名称空间只是项目的名称.在Website中,有动态编译页面的默认命名空间ASP.
编辑并继续 - 在Web应用程序中编辑并继续选项可用(要打开它,您必须转到"工具"菜单,单击"选项",然后在"调试"中找到"编辑并继续").此功能在Web Site.ASP.NET MVCIf中无法使用,您希望使用开发Web应用程序
ASP.NET MVC(模型视图控制器)最好的默认选项是Web应用程序.虽然可以在网站上使用MVC,但不建议这样做.
总结 - ASP.NET Web应用程序和Web站点之间最重要的区别是编译.因此,如果你在一个更大的项目上工作,少数人可以修改它,最好使用网站.但是如果你正在做一个较小的项目,你也可以使用Web应用程序.
其中一个主要区别是网站动态编译并创建动态组件.Web应用程序编译成一个大型程序集.
在Visual Studio 2008中已经完成了两者之间的区别.
是的Web应用程序比Web站点要好得多,因为Web应用程序为我们提供了自由:
在一个保护伞下拥有多个项目并建立项目之间的依赖关系.例如,对于PCS,我们可以在Web应用程序中进
门户网站
通知控制器(用于发送电子邮件)
业务层
数据访问层
异常经理
Server实用程序
WCF服务(适用于所有平台)
项目清单
对与ASP.NET页面关联的类文件中的代码运行单元测试
引用与独立类中的页面和用户控件关联的类
为整个站点创建单个程序集
控制为站点生成的程序集名称和版本号
避免将源代码放在生产服务器上.(您可以避免将源代码部署到IIS服务器.在某些情况下,例如共享托管环境,您可能会担心在IIS服务器上未经授权访问源代码.(对于网站项目,您可以通过以下方式避免此风险:在开发计算机上进行预编译并部署生成的程序集而不是源代码.但是,在这种情况下,您将失去轻松站点更新的一些好处.)
网站的性能问题(对网站的第一次请求可能需要编译网站,这可能会导致延迟.如果网站运行在内存不足的IIS服务器上,包括整个网站单个程序集可能会使用比多个程序集所需的内存更多的内存.)
应用程序通常在部署之前编译,因为网站使用app_code目录.当应用程序代码文件夹中的任何更改时,服务器将重新编译代码.这意味着您可以动态地添加/更改代码.
应用程序的优势在于没有重新编译,因此初始启动时间会更快.
我建议您在ASP.NET网站上观看视频Web应用程序项目和Web部署项目,这些项目非常详细地解释了它们,这对我很有帮助.
顺便说一下,不要对标题感到困惑,视频的很大一部分解释了网站项目和Web应用程序项目之间的区别以及Microsoft为何在Visual Studio 2005中重新引入Web应用程序项目(正如您可能已经知道的那样)最初只附带网站项目,然后在SP1中添加了Web应用程序项目).对于想要了解差异的人,我强烈推荐一个很棒的视频.
"网站"将其代码放在特殊的App_Code目录中,并在运行时将其编译为多个DLL(程序集)."Web应用程序"预编译为一个DLL.
网站和项目>>网站是使用visual studio创建ASP.NET应用程序的两种不同方法.一个是无项目的,另一个是项目环境.差异如下
解决方案文件与项目环境中的根目录存储在同一目录中.
在项目环境中部署之前,需要删除解决方案和项目文件.
完整的根目录部署在无项目环境中.
使用任何一种方法都没有太大的区别.但是,如果您要创建需要更长时间的网站,请选择项目环境.
它始终取决于您的客户的要求.ASP.NET只包含用户安全性和易于维护应用程序所需的灵活功能.
您可以将Web应用程序视为在ASP.NET框架内运行的二进制文件.而网站作为静态网页,您可以查看并轻松部署源代码.
但是这两种ASP.NET技术的优点和缺点都是有益的.
Web应用程序项目模型
提供与Visual Studio .NET Web项目相同的Web项目语义.有一个项目文件(基于项目文件的结构).构建模型 - 项目中的所有代码都编译为单个程序集.支持IIS和内置的ASP.NET开发服务器.支持Visual Studio 2005(重构,泛型等)和ASP.NET(母版页,成员资格和登录,网站导航,主题等)的所有功能.不再需要使用FrontPage Server Extensions(FPSE).
网站项目模型
没有项目文件(基于文件系统).
新的编译模型.
动态编译和处理页面而不在每个页面视图上构建整个站点.
支持IIS和内置的ASP.NET开发服务器.
每个页面都有自己的程序集.
不同的代码模型.