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

ASP.NET Web应用程序和ASP.NET网站之间的区别是什么?为什么我会选择一个而不是另一个?

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


当前回答

“网站”的代码位于一个特殊的App_code目录中,并且在运行时被编译为多个DLL(程序集)。“web应用程序”被预编译为一个DLL。

其他回答

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

Visual Studio 2008中消除了两者之间的区别。

这取决于你在发展什么。

一个以内容为导向的网站会经常改变其内容,而网站更适合于此。

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

是的,web应用程序比网站好得多,因为web应用程序给了我们自由:

在一个伞下有多个项目并建立项目之间的依赖关系。例如,对于PCS,我们可以在web中进行以下操作应用程序-Web门户通知控制器(用于发送电子邮件)业务层数据访问层异常管理器服务器实用程序WCF服务(所有平台通用)列表项目对类文件中的代码运行单元测试与ASP.NET页面关联参考以下类别与独立类中的页面和用户控件关联为整个站点创建单个部件的步骤控制为站点生成的程序集名称和版本号避免将源代码放在生产服务器上。(你可以避免将源代码部署到IIS服务器。在某些情况下,例如共享托管环境,您可能会担心未经授权访问IIS服务器上的源代码。(对于web站点项目,您可以通过在开发计算机并部署生成的程序集源代码的。然而,在这种情况下轻松更新网站的好处。)网站性能问题(对网站的第一请求可能需要编译网站,这可能导致延迟。如果网站运行在内存不足的IIS服务器,包括单个程序集使用的内存可能比多个组件。)

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()

我对在内存受限的传统硬件上转换大型站点的建议是,选择恢复到网站模型的选项。即使在最初的成功之后,问题也可能会在以后慢慢出现。

除非您特别需要动态编译的项目,否则不要使用网站项目。

为什么?因为当你试图改变或理解你的项目时,网站项目会把你逼疯。Visual Studio中的静态类型查找功能(例如查找用法、重构)将永远适用于任何大小合理的项目。有关详细信息,请参阅Visual Studio中的堆栈溢出问题慢速“查找所有引用”。

我真的看不出他们为什么会放弃Visual Studio 2005中的web应用程序,因为它是一种令人痛苦、精神错乱、效率低下的网站项目类型。