当我在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版本而异?
当前回答
MSDN中有一篇文章描述了这些差异:
比较网站项目和Web应用程序项目
BTW:关于这个话题有一些类似的问题,例如:
Visual Studio中的网站与ASP.Net Web应用程序之比较注意:已删除,不再在SO中ASP.NET中的网站或Web应用程序
其他回答
其中一个关键区别是网站动态编译和动态创建程序集。Web应用程序编译成一个大型程序集。
Visual Studio 2008中消除了两者之间的区别。
网站=当网站由图形设计师创建且程序员仅编辑一到两页时使用
Web应用程序=当应用程序由程序员创建且图形设计师仅编辑一页或两页/图像时使用。
网站可以使用任何HTML工具进行工作,而不必使用开发人员工作室,因为项目文件不需要更新等。当团队主要使用开发人员studio并且代码内容较高时,Web应用程序是最佳的。
(某些编码错误在编译时在Web应用程序中发现,直到运行时才在Web站点中发现。)
警告:我多年前就写过这个答案,之后就再也没有使用Asp.net了。我想事情已经开始了。
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()
我对在内存受限的传统硬件上转换大型站点的建议是,选择恢复到网站模型的选项。即使在最初的成功之后,问题也可能会在以后慢慢出现。
来自MCTS自定进度训练包考试70-515书:
利用web应用程序(项目),您可以创建MVC应用程序。Visual Studio将文件列表存储在项目文件(.csproj或.vbproj)中,而不是依赖于文件夹结构。不能混合使用Visual Basic和C#。不停止调试会话就无法编辑代码。您可以在多个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应用程序。