当我在Visual Studio中启动新的ASP.NET项目时,可以创建一个ASP.NET Web应用程序,也可以创建一个ASP.NET网站。
ASP.NET Web应用程序和ASP.NET网站之间有什么区别? 我为什么要选择一个?
根据我使用的Visual Studio版本,答案是否有所不同?
#1楼
网站和项目>>网站是使用Visual Studio创建ASP.NET应用程序的两种不同方法。 一个是没有项目的,另一个是项目环境。 差异如下
- 解决方案文件与项目环境中的根目录存储在同一目录中。
- 在项目环境中进行部署之前,需要删除解决方案和项目文件。
- 完整的根目录已部署在非项目环境中。
使用这两种方法都没有太大的基本区别。 但是,如果要创建将花费较长时间的网站,请选择项目环境。
#2楼
“网站”的代码位于特殊的App_Code目录中,并且在运行时被编译为多个DLL(程序集)。 “ Web应用程序”被预编译为一个DLL。
#3楼
在Web应用程序项目中,Visual Studio需要用于页面和用户控件的其他.designer文件。 网站项目不需要此开销。 标记本身被解释为设计。
#4楼
除非您特别需要动态编译的项目, 否则不要使用网站项目 。
为什么? 因为在尝试更改或了解您的项目时,网站项目将使您无所适从。 Visual Studio中的静态类型查找功能(例如查找用法,重构)将永久占用任何大小合理的项目。 有关更多信息,请参见Visual Studio中的堆栈溢出问题慢速“查找所有引用” 。
我真的不明白为什么他们将Web应用程序丢弃在Visual Studio 2005中,以减轻痛苦,浪费精力,生产力降低网站项目类型。
#5楼
它始终取决于客户的要求。 ASP.NET仅包含用户为安全和易于维护应用程序所需的灵活功能。
您可以将Web应用程序视为在ASP.NET框架内运行的二进制文件。 将网站作为静态网页,您可以查看并轻松地将源代码部署到该网站。
但是这两种ASP.NET技术的优点和缺点都是有好处的。
#6楼
网站-将不会创建解决方案文件。 如果我们要创建网站,则无需Visual Studio。
Web应用程序-将创建一个解决方案文件。 如果要创建Web应用程序,则需要Visual Studio。 它将在bin文件夹中创建一个.dll
文件。
#7楼
通常,在网站使用app_code目录时,应在部署之前编译应用程序。 当应用程序代码文件夹中的任何内容发生更改时,服务器将重新编译代码。 这意味着您可以随时随地在网站上添加/更改代码。
应用程序的优点是无需重新编译,因此初始启动时间将更快。
#8楼
Web应用程序项目模型
- 提供与Visual Studio .NET Web项目相同的Web项目语义。 有一个项目文件(基于项目文件的结构)。 构建模型-项目中的所有代码都被编译到单个程序集中。 同时支持IIS和内置的ASP.NET开发服务器。 支持Visual Studio 2005的所有功能(重构,泛型等)和ASP.NET(母版页,成员资格和登录名,站点导航,主题等)的所有功能。 不再需要使用FrontPage服务器扩展(FPSE)。
网站项目模型
- 没有项目文件(基于文件系统)。
- 新的编译模型。
- 动态编译和处理页面,而无需在每个页面视图上构建整个网站。
- 同时支持IIS和内置的ASP.NET开发服务器。
- 每个页面都有自己的程序集。
- 不同的代码模型。
#9楼
Compilation
首先,Compilation
存在差异。 网站未在服务器上预编译,而是在文件上编译。 这可能是一个优势,因为当您要更改网站中的某些内容时,您只需从服务器下载特定文件,然后对其进行更改,然后将该文件上传回服务器即可,一切都会正常进行。 在Web应用程序中,您无法执行此操作,因为所有内容都已预先编译,并且最终只有一个dll。 当您在项目的一个文件中更改某些内容时,必须再次重新编译所有内容。 因此,如果您想更改服务器网站上的某些文件,则是更好的解决方案。 它还允许许多开发人员在一个网站上工作。 另一方面,如果您不希望代码在服务器上可用,则应选择“ Web应用程序”。 由于发布网站后会创建一个DLL文件,因此该选项也更适合单元测试。
Project structure
也有所不同。 在Web应用程序中,您有一个项目文件,就像在普通应用程序中一样。 在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应用程序中,名称空间只是项目的名称。 在“网站”中,有用于动态编译页面的默认名称空间ASP。
编辑并继续-在Web应用程序中,“编辑并继续”选项可用(要打开它,您必须转到“工具”菜单,单击“选项”,然后在调试中找到“编辑并继续”)。 如果要使用Web开发网站应用程序,则此功能在Web Site.ASP.NET MVC中不起作用
ASP.NET MVC(模型视图控制器)的最佳和默认选项是Web应用程序。 尽管可以在网站中使用MVC,但不建议这样做。
摘要-ASP.NET Web应用程序和网站之间最重要的区别是编译。 因此,如果您在一个较大的项目上工作,可以由几个人进行修改,则最好使用网站。 但是,如果您正在做一个较小的项目,则也可以使用Web应用程序。
#10楼
绝对是Web应用程序,单个DLL文件且易于维护。 但是网站更灵活; 您可以随时随地编辑aspx文件。
#11楼
我建议您在ASP.NET网站上观看视频Web应用程序项目和Web部署项目 ,该视频详细解释了差异,对我很有帮助。
顺便说一下,不要被标题弄糊涂,视频的很大一部分解释了网站项目和Web应用程序项目之间的区别,以及Microsoft为什么在Visual Studio 2005中重新引入了Web应用程序项目(您可能已经知道,它最初仅与网站项目一起提供,然后在SP1中添加了Web应用程序项目)。 对于任何想知道两者之间的区别的人,我强烈推荐它。
#12楼
是的,Web应用程序比网站要好得多,因为Web应用程序为我们提供了自由:
在一个保护伞下拥有多个项目并在它们之间建立项目依赖关系。 例如,对于PCS,我们可以在网络应用程序中包含以下内容:
- 门户网站
- 通知控制器(用于发送电子邮件)
- 业务层
- 资料存取层
- 例外经理
- 服务器实用程序
- WCF服务(所有平台通用)
- 项目清单
在与ASP.NET页关联的类文件中的代码上运行单元测试
- 要引用与独立类的页面和用户控件关联的类
- 为整个站点创建单个装配
- 控制为站点生成的程序集名称和版本号
- 为了避免将源代码放在生产服务器上。 (您可以避免将源代码部署到IIS服务器。在某些情况下,例如共享托管环境,您可能会担心对IIS服务器上的源代码进行未经授权的访问。(对于网站项目,可以通过以下方法避免这种风险:在开发计算机上进行预编译并部署生成的程序集而不是源代码。但是,在这种情况下,您将失去一些易于进行站点更新的好处。)
- 网站的性能问题(向网站发出的第一个请求可能要求对该网站进行编译,这可能会导致延迟。并且,如果该网站运行在内存不足的IIS服务器上,包括单个程序集可能比多个程序集需要更多的内存。)
#13楼
WebSite:它会自动生成app_code文件夹,如果您将其发布在服务器上,然后再对任何特定文件或页面进行某些更改,则不必编译所有文件。
Web应用程序它会自动生成网站不会生成的解决方案文件,如果只更改一个文件,则必须编译整个项目以反映其更改。
#14楼
Web应用程序需要更多的内存,大概是因为您别无选择,只能编译为单个程序集。 我只是将一个大型的旧站点转换为Web应用程序,并且在编译时都遇到了内存不足的问题,并出现以下错误消息:
Unexpected error writing metadata to file '' --
Not enough storage is available to complete this operation.
错误,并在运行时显示以下错误消息:
Exception information:
Exception type: HttpException
Exception message: Exception of type 'System.OutOfMemoryException' was thrown.
at System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()
我建议在受内存限制的旧硬件上转换较大的站点,是选择该选项以还原为网站模型。 即使在最初取得成功之后,问题也可能在稍后蔓延。
#15楼
在Web应用程序中,您可以创建项目功能的各个层,并且可以通过将其划分为多个项目来在它们之间创建相互依赖关系,但是您永远不能在网站上这样做。
#16楼
Web支持应用程序是网站的一个示例。 网站和Web应用程序都可以是动态/静态的,这取决于需求,这是了解网站和Web应用程序工作的示例。
#17楼
网站:
网站项目是即时编译的。 您最终将获得更多的DLL文件,这可能很痛苦。 当一个目录中的页面或控件需要引用另一目录中的页面和控件时,这也会带来问题,因为另一个目录可能尚未编译到代码中。 另一个问题可能在发布中。
如果不要求Visual Studio不断重复使用相同的名称,它将为页面始终生成的DLL文件提供新的名称。 这可能会导致包含相同类名的DLL文件的多个紧密副本,这将产生大量错误。 该Web站点项目是随Visual Studio 2005一起引入的,但事实证明它并不是很受欢迎。
Web应用程序:
Web应用程序项目是作为外接程序创建的,现在作为Visual Studio 2005 SP 1的一部分存在。主要区别在于Web应用程序项目的设计工作原理与Visual Studio 2003附带的Web项目类似。在构建时将应用程序编译为单个DLL文件。 为了更新项目,必须对其进行重新编译并发布DLL文件以进行更改。
Web应用程序项目的另一个不错的功能是,从项目视图中排除文件要容易得多。 在网站项目中,您排除的每个文件都用文件名中的排除关键字重命名。 在Web应用程序项目中,该项目只是跟踪要从项目视图中包含/排除的文件,而无需重命名它们,从而使事情变得更加整洁。
“ ASP.NET 2.0-网站与Web应用程序”项目一文也提供了为什么使用一个而不使用另一个的原因。 这是它的摘录:
- 您需要将大型Visual Studio .NET 2003应用程序迁移到VS 2005吗? 使用Web应用程序项目。
- 您要在不创建项目文件的情况下作为Web项目打开和编辑任何目录吗? 使用网站项目。
- 您需要在编译期间添加构建前和构建后步骤吗? 使用Web应用程序项目。
- 您需要使用多个Web项目来构建Web应用程序吗? 使用Web应用程序项目。
- 您要为每个页面生成一个程序集吗? 使用网站项目。
- 您希望动态编译和处理页面而不在每个页面视图上构建整个网站? 使用网站项目。
- 您更喜欢单页代码模型而不是代码隐藏模型? 使用网站项目。
Web应用程序项目与Web站点项目 (MSDN)解释了Web站点和Web应用程序项目之间的区别。 此外,它还讨论了要在Visual Studio中进行的配置。
#18楼
这听起来似乎有些明显,但是我认为这是一个被误解的原因,因为Visual Studio 2005最初只是随网站一起提供的。 如果您的项目所处理的网站是相当有限的,并且没有太多的逻辑或物理隔离,则该网站很好。 但是,如果它确实是具有许多模块的Web应用程序,其中许多用户可以在其中添加和更新数据,那么使用Web应用程序会更好。
网站模型的最大app_code
是app_code
部分中的所有内容都是动态编译的。 您无需完全重新部署即可进行C#文件更新。 但是,这是一个巨大的牺牲。 很多事情都是在难以控制的情况下发生的。 命名空间很难控制,并且默认情况下, app_code
下的任何内容都无法使用特定的DLL使用,因为所有内容都是动态编译的。
Web应用程序模型没有动态编译,但是您可以控制我提到的内容。
如果您要进行n层开发,我强烈建议您使用Web应用程序模型。 如果您正在做一个有限的网站或快速而肮脏的实施,则网站模型可能具有优势。
可以在以下位置找到更详细的分析:
#19楼
MSDN中有一篇文章描述了这些区别:
顺便说一句:关于该主题也有一些类似的问题,例如:
- 网站与Visual Studio中的ASP.Net Web应用程序 注意:已删除,不再适用于SO
- ASP.NET中的网站或Web应用程序
#20楼
这取决于您所开发的内容。
面向内容的网站将经常更改其内容,而网站则更适合。
应用程序倾向于将其数据存储在数据库中,并且其页面和代码很少更改。 在这种情况下,最好有一个Web应用程序,其中程序集的部署受到更多的控制,并且对单元测试有更好的支持。
#21楼
主要区别之一是网站可以动态编译并创建即时程序集。 Web应用程序可编译为一个大型程序集。
在Visual Studio 2008中已经消除了两者之间的区别。
#22楼
总结上面的一些答案:
灵活性 ,您可以实时更改网页吗?
网站 :可能。 优点:短期利益。 缺点:项目混乱的长期风险。
Web App :缺点:不可能。 编辑页面,将更改归档到源代码管理,然后构建和部署整个站点。 优点:保持高质量的项目。
发展问题
网站 :没有.csproj文件的简单项目结构。两个.aspx页可能具有相同的类名而没有冲突。 随机项目目录名称会导致生成错误,例如.net framework为什么与自己生成的文件 冲突以及.net framework为什么与其自己生成的文件冲突 。 优点:简单(简单)。 缺点:不稳定。
Web App :项目结构类似于WebForms项目,带有.csproj文件。 ASP页面的类名称必须唯一。 优点:简单(智能)。 缺点:没有,因为网络应用仍然很简单。
#23楼
网站 =当图形设计师创建网站且程序员仅编辑一个或两个页面时使用
Web应用程序 =在由程序员创建应用程序且图形设计者仅编辑一个或两个页面/图像时使用。
可以使用任何HTML工具来使用Web站点,而无需拥有开发人员工作室,因为不需要更新项目文件等。当团队主要使用开发人员工作室并且代码内容丰富时,Web应用程序是最佳的。
(在编译时在Web应用程序中发现了一些编码错误,直到运行时才在Web站点中发现这些错误。)
警告: 我很多年前写了这个答案,从那以后就没有使用过Asp.net。 我希望事情现在继续发展。
#24楼
网站是您部署到ASP.NET Web服务器(如IIS)的工具。 只是一堆文件和文件夹。 在网站上没有任何内容可以将您与Visual Studio关联(没有项目文件)。 网页(例如.aspx,.ascx,.master)的代码生成和编译是在运行时动态完成的,框架检测到这些文件的更改并自动重新编译。 您可以将要在页面之间共享的代码放在特殊的App_Code文件夹中,或者可以对其进行预编译并将程序集放在Bin文件夹中。
Web应用程序是一个特殊的Visual Studio项目。 与网站的主要区别在于,在构建项目时,所有代码文件都被编译到单个程序集中,该程序集位于bin目录中。 您无需将代码文件部署到Web服务器。 无需为共享代码文件提供特殊文件夹,您可以将它们放在任何地方,就像在类库中一样。 由于Web应用程序包含不需要部署的文件(例如项目和代码文件),因此Visual Studio中存在一个Publish命令,可以将网站输出到指定位置。
App_Code与Bin
部署共享代码文件通常不是一个好主意,但这并不意味着您必须选择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项目,所以您可以获得一些网站中不可用的功能。 例如,您可以使用构建事件来执行各种任务,例如缩小和/或组合Javascript文件。
Visual Studio 2010中引入的另一个不错的功能是Web.config转换 。 这在网站中也不可用。 现在可以在VS 2013中使用网站。
构建Web应用程序比构建Web站点要快,特别是对于大型站点而言。 这主要是因为Web应用程序不编译标记代码。 在MVC中,如果将MvcBuildViews设置为true,则它将编译标记代码并获得错误检测,这非常有用。 不利的一面是,每次构建解决方案时,它都会构建完整的站点,这可能会很慢且效率低下,特别是如果您不编辑站点。 我发现自己打开和关闭MvcBuildViews(这需要卸载项目)。 另一方面,对于“网站”,您可以选择是否要将网站构建为解决方案的一部分。 如果您选择不这样做,则构建解决方案的速度非常快,并且如果进行了更改,则始终可以单击“网站”节点并选择“构建”。
在MVC Web应用程序项目中,您具有用于执行常见任务(例如“添加视图”,“转到视图”,“添加控制器”等)的其他命令和对话框。这些在MVC网站中不可用。
如果使用IIS Express作为开发服务器,则可以在网站中添加虚拟目录。 此选项在Web应用程序中不可用。
NuGet软件包还原在网站上不起作用,您必须手动安装在packages.config上列出的软件包 软件包还原现在可与从NuGet 2.7开始的网站一起使用
#25楼
从MCTS自定进度培训套件考试70-515本书中:
使用网络应用程序(项目),
- 您可以创建一个MVC应用程序。
- Visual Studio将文件列表存储在项目文件(.csproj或.vbproj)中,而不是依赖于文件夹结构。
- 您不能混合使用Visual Basic和C#。
- 您必须停止调试会话才能编辑代码。
- 您可以在多个Web项目之间建立依赖关系。
- 您必须在部署之前编译该应用程序,这样可以防止您在无法编译另一个页面的情况下测试该页面。
- 您不必将源代码存储在服务器上。
- 您可以控制程序集名称和版本。
- 部署后,如果不重新编译就无法编辑单个文件。