ASP.NET网站或ASP.NETWeb应用程序?

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

ASP.NETWeb应用程序和ASP.NET网站有什么区别?为什么我要选择一个而不是另一个?

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

262550 次浏览

网站:

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

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

Web应用程序:

Web应用程序项目是作为加载项创建的,现在作为一部分存在用于Visual Studio 2005的SP 1。主要区别是Web应用程序项目旨在与Visual Studio 2003附带的Web项目类似地工作。它将在构建时将应用程序编译为单个DLL文件时间。要更新项目,必须重新编译它和DLL文件发布以进行更改。

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

参考

文章ASP.NET2.0-Web Site vs Web Application project还给出了为什么使用一个而不是另一个的原因。以下是它的摘录:

  • 您需要将大型Visual Studio. NET 2003应用程序迁移到VS2005年?使用Web应用程序项目。
  • 您想将任何目录作为Web项目打开和编辑,而无需创建项目文件?使用网站项目。
  • 您需要在编译期间添加预构建和构建后步骤吗?使用Web应用程序项目。
  • 您需要使用多个Web构建Web应用程序项目?使用Web应用程序项目。
  • 您想为每个页面生成一个程序集?使用网站项目。
  • 您更喜欢动态编译和在没有构建的页面上工作每个页面浏览量的整个网站?使用Web网站项目。
  • 您更喜欢单页代码模型而不是代码隐藏模型?使用网站项目。

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

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

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

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

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

更详细的分析可以在这里找到:

MSDN中有一篇文章描述了这些差异:

比较网站项目和Web应用程序项目

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

这取决于你正在开发什么。

一个面向内容的网站将有其内容经常变化,一个网站是更好的。

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

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

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

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

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

网站可以使用任何超文本标记语言工具,而无需开发人员工作室,因为项目文件不需要更新等,当团队主要使用开发人员工作室并且代码含量高时,Web应用程序是最好的。

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

警告:我多年前写了这个答案,从那以后就没有用过Asp.net。我希望事情已经向前发展了。

网站是您部署到IIS等ASP.NETWeb服务器的内容。只是一堆文件和文件夹。网站中没有任何内容将您与Visual Studio联系起来(没有项目文件)。网页(如. aspx、. ascx、. master)的代码生成和编译运行时动态完成,框架会检测到对这些文件的更改并自动重新编译。您可以将想要页面间共享的代码放在特殊的App_Code文件夹中,也可以预编译并将程序集放在bin文件夹中。

Web应用程序是一个特殊的Visual Studio项目。与网站的主要区别在于,当您构建项目时,所有代码文件都编译成一个程序集,该程序集放置在bin目录中。您不将代码文件部署到Web服务器。您可以将共享代码文件放在任何地方,而不是一个特殊的文件夹,就像在类库中一样。由于Web应用程序包含不打算部署的文件,例如项目和代码文件,因此Visual Studio中有一个发布命令可以将网站输出到指定位置。

App_Codevs bin

部署共享代码文件通常不是一个好主意,但这并不意味着您必须选择Web应用程序。您可以拥有一个引用类库项目的网站,该类库项目包含网站的所有代码。Web应用程序只是一种方便的方法。

代码隐藏

本主题特定于. aspx和. ascx文件。本主题在不使用代码隐藏文件的新应用程序框架(如ASP.NETMVC和ASP.NET网页)中的相关性越来越低。

通过将所有代码文件编译到单个程序集中,包括. aspx页面和. ascx控件的代码隐藏文件,在Web应用程序中,您必须为每一个微小的更改重新构建,并且您无法进行实时更改。这在开发过程中可能是一个真正的痛苦,因为您必须不断重新构建以查看更改,而对于网站,运行时会检测到更改,并且页面/控件会自动重新编译。

让运行时管理代码隐藏程序集对您来说工作较少,因为您无需担心为页面/控件提供唯一名称,或将它们组织到不同的命名空间中。

我并不是说部署代码文件总是一个好主意(特别是在共享代码文件的情况下),但是代码隐藏文件应该只包含执行用户界面特定任务、连接事件处理程序等的代码。您的应用程序应该分层,以便重要代码总是最终出现在宾文件夹中。如果是这种情况,那么部署代码隐藏文件不应该被认为是有害的。

Web应用程序的另一个限制是您只能使用项目的语言。在网站中,您可以有一些C#页面,一些VB页面等。不需要特殊的Visual Studio支持。这就是构建提供程序可扩展性的美妙之处。

此外,在Web应用程序中,您不会在页面/控件中进行错误检测,因为编译器仅编译您的代码隐藏类,而不是在运行时编译的标记代码(在MVC中,您可以使用MvcBuildViews选项修复此问题)。

Visual Studio

由于Web应用程序是Visual Studio项目,因此您可以获得网站中不可用的某些功能。例如,您可以使用构建事件来执行各种任务,例如缩小和/或组合Javascript文件。

Visual Studio 2010中引入的另一个不错的功能是Web.config变换这在网站上也不可用。 Now适用于VS 2013中的网站。

构建Web应用程序比构建网站更快,特别是对于大型站点。这主要是因为Web应用程序不编译标记代码。在MVC中,如果您将MvcBuildViews设置为true,那么它会编译标记代码,并且可以进行错误检测,这非常有用。缺点是,每次构建解决方案时,它都会构建完整的站点,这可能会缓慢且低效,特别是如果您不编辑站点。我发现自己打开和关闭MvcBuildViews(这需要项目卸载)。另一方面,对于网站,您可以选择是否要将站点作为解决方案的一部分构建。如果您选择不这样做,那么构建解决方案非常快,如果您进行了更改,您可以随时单击网站节点并选择构建。

在MVC Web应用程序项目中,您有用于常见任务的额外命令和对话框,例如“添加视图”、“转到视图”、“添加控制器”等。

如果您使用IIS Express作为开发服务器,则可以在网站中添加虚拟目录。此选项在Web应用程序中不可用。

NuGet软件包还原在网站上不起作用,您必须手动安装packages.config软件包还原现在适用于网站启动NuGet 2.7

除非您对动态编译的项目有特定的需求,不要使用网站项目

为什么?因为当您尝试更改或理解您的项目时,网站项目会让您焦头烂额。Visual Studio中的静态类型查找功能(例如查找用法、重构)在任何合理大小的项目上都将永远花费时间。有关更多信息,请参阅Stack Overflow问题在Visual Studio中缓慢查找所有引用

我真的不明白为什么他们在Visual Studio 2005中放弃了Web应用程序,以获得令人痛苦、耗尽理智、提高生产力的carbuncle网站项目类型。

应用程序通常在部署之前编译,因为网站使用app_code目录。当应用程序代码文件夹中发生任何变化时,服务器将重新编译代码。这意味着您可以动态添加/更改网站的代码。

应用程序的优点是无需重新编译,因此初始启动时间会更快。

我建议你在ASP.NET网站上观看视频Web应用程序项目和Web部署项目,它详细解释了差异,这对我很有帮助。

顺便说一句,不要对标题感到困惑,视频的很大一部分解释了网站项目和Web应用程序项目之间的区别,以及为什么Microsoft在Visual Studio 2005中重新引入了Web应用程序项目(您可能已经知道,它最初只附带网站项目,然后在SP1中添加了Web应用程序项目)。

从MCTS自定进度培训工具包考试70-515书:

使用Web应用程序(项目),

  1. 您可以创建一个MVC应用程序。
  2. Visual Studio将文件列表存储在项目文件(. csproj或. vbproj)中,而不是依赖于文件夹结构。
  3. 您不能混合使用Visual Basic和C#。
  4. 如果不停止调试会话,则无法编辑代码。
  5. 您可以在多个Web项目之间建立依赖关系。
  6. 您必须在部署之前编译应用程序,这会阻止您在另一个页面无法编译时测试页面。
  7. 您不必将源代码存储在服务器上。
  8. 您可以控制程序集名称和版本。
  9. 部署后,如果不重新编译,就无法编辑单个文件。

网站和项目>>网站是使用Visual Studio创建ASP.NET应用程序的两种不同方法。一个是无项目环境,另一个是项目环境。差异如

  1. 解决方案文件与项目环境中的根目录存储在同一目录中。
  2. 在项目环境中部署之前需要删除解决方案和项目文件。
  3. 完整的根目录部署在无项目环境中。

使用两种方法都没有太大的基本区别。但是,如果您正在创建需要更长时间的网站,请选择项目环境。

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

在Web应用程序项目中,Visual Studio需要用于页面和用户控件的额外.设计器文件。网站项目不需要这种开销。标记本身被解释为设计。

它始终取决于您的客户端的要求。ASP.NET只包括用户需要的安全和易于维护的应用程序的灵活功能。

您可以将web应用程序视为在ASP.NET框架内运行的二进制文件。网站是一个静态网页,您可以查看并轻松部署源代码。

但这两种ASP.NET技术的优点和缺点都是好的。

网站-不会创建任何解决方案文件。如果我们想创建网站,不需要Visual Studio。

Web应用程序-将创建一个解决方案文件。如果我们想创建Web应用程序,应该需要Visual Studio。它将在bin文件夹中创建一个.dll文件。

Web应用程序项目模型

  • 提供与Visual Studio. NET Web相同的Web项目语义学项目。有一个项目文件(基于项目文件的结构)。构建模型-项目中的所有代码都编译成一个汇编。支持IIS和内置的ASP.NET开发服务器。支持Visual Studio 2005的所有功能(重构、泛型等)和ASP.NET(母版页,会员和登录,网站导航、主题等)。使用FrontPage服务器扩展(FPSE)不再是必需的。

网站项目模型

  • 没有项目文件(基于文件系统)。
  • 新的编译模型。
  • 动态编译和处理页面,而无需构建整个站点页面浏览量
  • 支持IIS和内置的ASP.NET开发服务器。
  • 每个页面都有自己的程序集。
  • 不同的代码模型。

Compilation首先编译是有区别的。网站不是在服务器上预编译的,而是在文件上编译的。它可能是一个优势,因为当您想更改Web中的某些内容时网站您可以从服务器下载特定文件,更改它并将此文件上传到服务器,一切都会正常工作。在Web应用程序你不能这样做,因为所有的东西都是预编译的你最终只有一个dll。当您在一个文件中更改某些内容时你的项目你必须重新编译所有东西。所以如果你愿意喜欢有可能更改服务器网站上的一些文件为您提供更好的解决方案。它还允许许多开发人员在一个网站。另一方面,如果您不希望您的代码成为在服务器上可用,您应该选择Web应用程序。这选项也更适合单元测试,因为一个DLL文件是在您的网站发布后创建。

Project structure项目的结构也有差异。在Web应用程序中,您有一个项目文件,就像在普通应用程序中一样。在网站中,没有传统的项目文件,您只有解决方案文件。所有引用和设置都存储在web.config文件中。@Page directive在@Page指令中,包含与此页面关联的类的文件有一个不同的属性。在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" %>

命名空间-在上面的例子中,您还可以看到另一个区别-如何创建命名空间。在Web应用程序中,命名空间只是一个项目的名称。在网站中,有默认的命名空间ASP动态编译的页面。

编辑并继续-在Web应用程序中编辑并继续选项是可用(要打开它,您必须转到工具菜单,单击选项然后在调试中找到编辑并继续)。此功能不起作用在WebSite.ASP.NETMVC如果您想使用

开发Web应用程序

ASP.NETMVC(模型视图控制器)的最佳和默认选项是Web应用程序。虽然可以在网站中使用MVC,但它是不推荐

总结-ASP.NETWeb应用程序之间最重要的区别网站是编译的。所以如果你在一个更大的项目上工作少数人可以修改它,最好使用网站。但如果你是做一个较小的项目,你也可以使用Web应用程序。

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

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

  1. 在一个保护伞下拥有多个项目并建立项目之间的依赖关系。例如。对于PCS,我们可以在Web中关注应用程序-

    • 门户网站
    • 通知控制器(用于发送电子邮件)
    • 业务层
    • 数据访问层
    • 异常管理器
    • 服务器实用程序
    • WCF服务(适用于所有平台)
    • 列表项
  2. 要对以下类文件中的代码运行单元测试ASP.NET页面

  3. 引用那些类与独立类中的页面和用户控件关联
  4. 为整个站点创建单个程序集
  5. 控制为站点生成的程序集名称和版本号
  6. 避免将源代码放在正式服上。(您可以避免将源代码部署到IIS服务器。在某些情况下,例如共享主机环境,您可能会担心未经授权访问IIS服务器上的源代码。(对于Web站点项目,您可以通过在开发计算机并部署生成的程序集的源代码。但是,在这种情况下,您会丢失一些简单的网站更新的好处。)
  7. 网站性能问题(The对网站的第一次请求可能需要编译网站,这可能会导致延迟。如果网站在内存不足的IIS服务器,包括整个站点单个程序集可能会使用比所需更多的内存多个程序集。)

网址:它会自动生成app_code文件夹,如果您在服务器上发布它,之后如果您在任何特定文件或页面中进行一些更改,则无需编译所有文件。

Web应用程序它会自动生成网站不会生成的解决方案文件,如果您在一个文件中进行更改,则必须编译完整的项目以反映其更改。

Web应用程序需要更多内存,大概是因为您别无选择,只能编译成单个程序集。我刚刚将一个大型遗留站点转换为Web应用程序,并且在编译时遇到运行内存溢出的问题,并显示错误消息如下:

Unexpected error writing metadata to file '' --Not enough storage is available to complete this operation.

错误,并在运行时显示如下错误消息:

Exception information:Exception type: HttpExceptionException message: Exception of type 'System.OutOfMemoryException' was thrown.at System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()

我建议在内存受限的旧硬件上转换较大的站点,选择恢复到网站模型的选项。即使在最初的成功之后,问题也可能在以后蔓延。

在Web应用程序中,您可以创建项目功能的层,并可以通过将其划分为许多项目来创建它们之间的相互依赖关系,但您永远不能在网站上这样做。

这里的Web支持应用程序是网站的一个例子.

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

总结一下上面的一些答案:

灵活性,您可以对网页进行实时更改吗?

0:可能。赞成:短期利益。反对:项目混乱的长期风险。

网页应用:缺点:不可能。编辑一个页面,将更改归档到源代码控制,然后构建和部署整个站点。赞成:维护一个高质量的项目。

发展问题

网站:简单的项目结构,没有. csproj文件。两个. aspx页面可以具有相同的类名而不会冲突。随机的项目目录名称导致像为什么. net框架与其自己生成的文件冲突为什么. net框架与其自己生成的文件冲突这样的构建错误。优点:简单(简单)。缺点:不稳定。

网页应用:项目结构类似于WebForms项目,带有. csproj文件。asp页面的类名必须是唯一的。Pro:简单(智能)。Con:无,因为Web应用程序仍然很简单。