ASP.NET网站还是ASP.NET Web应用程序?

ASP.NET网站还是ASP.NET Web应用程序?,asp.net,.net,visual-studio,projects-and-solutions,Asp.net,.net,Visual Studio,Projects And Solutions,在Visual Studio中启动新的ASP.NET项目时,我可以创建ASP.NET Web应用程序,也可以创建ASP.NET网站 ASP.NET Web应用程序和ASP.NET网站之间有什么区别?为什么我会选择其中一个呢 答案是否因我使用的Visual Studio版本而异?网站: 网站项目是动态编译的。你最终会得到更多的DLL文件,这可能是一件痛苦的事情。当一个目录中的页面或控件需要引用另一个目录中的页面和控件时,也会出现问题,因为另一个目录可能尚未编译到代码中。另一个问题可能是出版业 如果

在Visual Studio中启动新的ASP.NET项目时,我可以创建ASP.NET Web应用程序,也可以创建ASP.NET网站

ASP.NET Web应用程序和ASP.NET网站之间有什么区别?为什么我会选择其中一个呢

答案是否因我使用的Visual Studio版本而异?

网站: 网站项目是动态编译的。你最终会得到更多的DLL文件,这可能是一件痛苦的事情。当一个目录中的页面或控件需要引用另一个目录中的页面和控件时,也会出现问题,因为另一个目录可能尚未编译到代码中。另一个问题可能是出版业

如果VisualStudio没有被告知经常重复使用相同的名称,它将始终为页面生成的DLL文件提供新名称。这可能会导致包含相同类名的多个DLL文件的关闭副本, 这将产生大量错误。该网站项目是在VisualStudio2005中引入的,但结果证明它并不流行

Web应用程序: Web应用程序项目是作为外接程序创建的,现在作为一部分存在 VisualStudio2005的SP 1版本。主要区别在于Web应用程序项目 设计的工作方式与VisualStudio2003附带的Web项目类似。它将在构建时将应用程序编译成单个DLL文件 时间若要更新项目,必须重新编译该项目并删除DLL文件 为发生更改而发布

Web应用程序的另一个不错的特性 从项目视图中排除文件要容易得多。在 网站项目中,您排除的每个文件都将重命名为排除的文件 文件名中的关键字。在Web应用程序项目中,该项目只是 跟踪要从项目视图中包括/排除哪些文件,而无需 重新命名它们,使事情更加整洁

文章还给出了为什么使用其中一个而不使用另一个的原因。以下是它的摘录:

  • 您需要将大型Visual Studio.NET 2003应用程序迁移到VS 2005? 使用Web应用程序项目。
  • 您希望以Web项目的形式打开和编辑任何目录,而无需 创建项目文件使用网站 项目。
  • 您需要在编译期间添加预构建和后构建步骤吗? 使用Web应用程序项目。
  • 您需要使用多个Web应用程序构建Web应用程序 项目使用Web应用程序项目。
  • 是否要为每个页面生成一个程序集使用网站项目。
  • 您更喜欢动态编译和在不构建页面的情况下处理页面 在每个页面上查看整个站点使用网络 站点项目。
  • 您更喜欢单页代码模型而不是代码隐藏模型使用网站 项目。

(MSDN)解释了web站点和web应用程序项目之间的差异。此外,它还讨论了在Visual Studio中进行的配置。

这听起来可能有点明显,但我认为这是一个误解,因为VisualStudio2005最初仅随网站提供。如果你的项目涉及一个相当有限的网站,并且没有太多的逻辑或物理分离,那么这个网站就可以了。但是,如果它确实是一个具有不同模块的web应用程序,其中许多用户添加和更新数据,那么您最好使用web应用程序


该网站模型最大的优点是
app\u code
部分中的任何内容都是动态编译的。您可以在不完全重新部署的情况下进行C#文件更新。然而,这是一个巨大的牺牲。很多事情都是在幕后发生的,很难控制。名称空间很难控制,而且默认情况下,
app\u code
下的任何内容的特定DLL使用都会退出窗口,因为所有内容都是动态编译的

web应用程序模型没有动态编译,但是您可以控制我提到的内容

如果您正在进行n层开发,我强烈推荐web应用程序模型。如果您正在做一个有限的web站点或一个快速而肮脏的实现,那么web站点模型可能具有优势

更详细的分析见:


MSDN中有一篇文章描述了这些区别:

顺便说一句:关于这个话题有一些类似的问题,例如:

  • 注意:已删除,不再如此

这取决于你在开发什么

一个以内容为导向的网站,其内容会经常改变,而一个网站更适合这样做


应用程序往往将其数据存储在数据库中,其页面和代码很少更改。在这种情况下,最好有一个Web应用程序,其中程序集的部署更受控制,并更好地支持单元测试。

关键区别之一是网站动态编译并动态创建程序集。Web应用程序编译成一个大型程序集


在VisualStudio2008中,两者之间的区别已经消除。

网站=当网站由图形设计师创建且程序员仅编辑一到两个页面时使用

Web应用程序=当应用程序由程序员创建且图形设计师仅编辑一个或两个页面/图像时使用

网站可以使用任何HTML工具工作,而不必使用developer studio,因为项目文件不需要更新,等等。当团队主要使用developer studio并且代码含量较高时,Web应用程序是最好的

(编译时在Web应用程序中发现了一些编码错误,而这些错误直到运行时才在Web站点中发现。)

警告:我多年来一直在写这个答案
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"  
Inherits="WebApplication._Default" %>  
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 
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()