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

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

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


当前回答

编译首先,编译是有区别的。网站不是在服务器上预编译的,而是在文件上编译的。可能是这是一个优势,因为当您想要更改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应用程序。

其他回答

这里Web支持应用程序是网站的一个示例。网站和Web应用程序都可以是动态/静态的,这取决于需求,这里有一个例子来理解网站和Web程序的工作。

网站:

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

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

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应用程序迁移到VS2005? 使用Web应用程序项目。您希望将任何目录作为Web项目打开和编辑,而不需要创建项目文件?使用网站项目您需要在编译期间添加预编译和后编译步骤吗?使用Web应用程序项目。您需要使用多个Web构建Web应用程序项目?使用Web应用程序项目。是否要为每个页面生成一个程序集?使用网站项目。您更喜欢动态编译和在不构建的情况下处理页面每个页面视图上的整个站点?使用Web现场项目。您更喜欢单页代码模型而不是代码隐藏模型?使用网站项目

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

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

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

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

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

更详细的分析见:

Web应用程序项目和Web部署项目位于此处网站还是Web应用程序?

绝对是web应用程序,单个DLL文件,易于维护。但网站更灵活;您可以随时编辑aspx文件。

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

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

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