当我在Visual Studio中启动新的ASP.NET项目时,我可以创建ASP.NET Web应用程序,也可以创建ASP.NET网站。
ASP.NET Web应用程序和ASP.NET网站之间的区别是什么?为什么我会选择一个而不是另一个?
答案是否因我使用的Visual Studio版本而异?
当我在Visual Studio中启动新的ASP.NET项目时,我可以创建ASP.NET Web应用程序,也可以创建ASP.NET网站。
ASP.NET Web应用程序和ASP.NET网站之间的区别是什么?为什么我会选择一个而不是另一个?
答案是否因我使用的Visual Studio版本而异?
当前回答
其中一个关键区别是网站动态编译和动态创建程序集。Web应用程序编译成一个大型程序集。
Visual Studio 2008中消除了两者之间的区别。
其他回答
除非您特别需要动态编译的项目,否则不要使用网站项目。
为什么?因为当你试图改变或理解你的项目时,网站项目会把你逼疯。Visual Studio中的静态类型查找功能(例如查找用法、重构)将永远适用于任何大小合理的项目。有关详细信息,请参阅Visual Studio中的堆栈溢出问题慢速“查找所有引用”。
我真的看不出他们为什么会放弃Visual Studio 2005中的web应用程序,因为它是一种令人痛苦、精神错乱、效率低下的网站项目类型。
“网站”的代码位于一个特殊的App_code目录中,并且在运行时被编译为多个DLL(程序集)。“web应用程序”被预编译为一个DLL。
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()
我对在内存受限的传统硬件上转换大型站点的建议是,选择恢复到网站模型的选项。即使在最初的成功之后,问题也可能会在以后慢慢出现。
WebSite:它会自动生成app_code文件夹,如果您在服务器上发布它,然后如果您对任何特定文件或页面进行一些更改,则不必编译所有文件。
Web应用程序它自动生成网站不生成的解决方案文件,如果您在一个文件中进行更改,则必须编译整个项目以反映其更改。
编译首先,编译是有区别的。网站不是在服务器上预编译的,而是在文件上编译的。可能是这是一个优势,因为当您想要更改Web中的某些内容时站点您只需从服务器下载一个特定的文件,更改它并把这个文件上传回服务器,一切都会正常。在Web中应用程序无法执行此操作,因为所有内容都是预编译的你最终只有一个dll。当您更改一个文件中的内容时您的项目必须重新编译所有内容。所以如果你愿意希望能够更改服务器上的某些文件。网站是更好的解决方案。它还允许许多开发人员开发一个网站。另一方面,如果您不希望代码您应该选择Web应用程序。这选项对于单元测试也更好,因为一个DLL文件在发布网站后创建。
项目结构项目的结构也存在差异。在Web应用程序中,您有一个项目文件,就像在普通应用程序中一样。在网站中,并没有传统的项目文件,只有解决方案文件。所有引用和设置都存储在web.config文件中。@Page指令对于包含与此页面关联的类的文件,@Page指令中有一个不同的属性。在Web应用程序中,它是标准的“CodeBehind”,在Web站点中使用“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" %>
命名空间-在上面的示例中,您还可以看到另一个区别-如何创建命名空间。In-Web Application命名空间只是一个项目名称。在网站中有默认的命名空间ASP动态编译页面。编辑并继续-在Web应用程序中,“编辑并继续”选项为可用(要打开它,必须转到“工具”菜单,单击“选项”然后在调试中找到“编辑并继续”)。此功能不起作用在Web Site.ASP.NET MVCI中,如果要使用ASP.NET MVC(模型视图控制器)最佳和默认选项是Web应用程序。尽管可以在Web站点中使用MVC不建议使用。摘要-ASP.NET Web应用程序之间最重要的区别网站是编译。所以如果你在一个更大的项目上工作少数人可以修改它,最好使用网站。但如果你是做一个较小的项目,您也可以使用Web应用程序。