关于.NET:ASP.NET网站或ASP.NET Web应用程序?

ASP.NET Web Site or ASP.NET Web Application?

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

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

根据我使用的Visual Studio版本,答案是否不同?


网站:

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

如果不要求Visual Studio经常重复使用相同的名称,它将始终为页面生成的dll文件提供新的名称。这会导致包含相同类名的dll文件的多个关闭副本,这会产生很多错误。网站项目是在Visual Studio 2005中引入的,但事实证明它并不十分流行。

Web应用程序:

Web应用程序项目是作为外接程序创建的,现在作为一部分存在用于Visual Studio 2005的SP 1。主要区别在于Web应用程序项目设计用于与Visual Studio 2003附带的Web项目类似的工作。它将在生成时将应用程序编译为单个dll文件时间。为了更新项目,必须重新编译它和dll文件为发生更改而发布。

Web应用程序的另一个好特性Project更容易从项目视图中排除文件。在网站项目,您排除的每个文件都将重命名为排除的文件名中的关键字。在Web应用程序项目中,该项目跟踪项目视图中要包含/排除的文件重新命名它们,使事情更加整洁。

参考文献

文章ASP.NET 2.0-网站与Web应用程序项目也给出了为什么要使用其中一个而不是另一个的原因。以下是它的摘录:

  • You need to migrate large Visual Studio .NET 2003 applications to VS
    2005? use the Web Application project.
  • You want to open and edit any directory as a Web project without
    creating a project file? use Web Site
    project.
  • You need to add pre-build and post-build steps during compilation?
    use Web Application project.
  • You need to build a Web application using multiple Web
    projects? use Web Application project.
  • You want to generate one assembly for each page? use Web Site project.
  • You prefer dynamic compilation and working on pages without building
    entire site on each page view? use Web
    Site project.
  • You prefer single-page code model to code-behind model? use Web Site
    project.

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


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

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

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

此主题特定于.aspx和.ascx文件。此主题在新的应用程序框架(如不使用代码隐藏文件的ASP.NET MVC和ASP.NET网页)中日益相关。好的。

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

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

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

Web应用程序的另一个限制是您只能使用项目的语言。在网站中,您可以使用C语言创建一些页面,也可以使用VB等语言创建一些页面。无需特殊的Visual Studio支持。这就是构建提供者可扩展性的优点。好的。

此外,在Web应用程序中,页面/控件中不会检测到错误,因为编译器只编译代码隐藏类,而不编译标记代码(在MVC中,可以使用MVCBuildView选项修复此问题),该选项在运行时编译。好的。可视演播室

因为Web应用程序是Visual Studio项目,所以您可以在网站中获得一些不可用的功能。例如,您可以使用构建事件来执行各种任务,例如缩小和/或合并JavaScript文件。好的。

Visual Studio 2010中引入的另一个不错的功能是web.config转换。这在网站中也不可用。Now works with web sites in vs 2013.好的。

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

在MVC Web应用程序项目中,您有额外的命令和对话框用于执行常见任务,如"添加视图"、"转到视图"、"添加控制器"等。这些命令和对话框在MVC网站中不可用。好的。

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

nuget package restore在网站上不起作用,您必须手动安装packages.config上列出的软件包。package restore now works with web sites starting nuget 2.7好的。好啊。


website=当网站是由图形设计师创建的并且程序员只编辑一个或两个页面时使用

web application=当应用程序是由程序员创建的,图形设计师只编辑一个或两个页面/图像时使用。

网站可以使用任何HTML工具而不必使用Developer Studio,因为项目文件不需要更新等。当团队主要使用Developer Studio并且代码内容很高时,Web应用程序是最好的。

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

警告:我多年前就写过这个答案,从那以后就没有使用过ASP.NET了。我想事情现在已经有了进展。


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

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

我真的不明白为什么他们在Visual Studio 2005中放弃了Web应用程序,因为它是一种疼痛诱导、理智排解、高效的Carbull网站项目类型。


在msdn中有一篇文章描述了这些区别:

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

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

  • 网站与Visual Studio中的ASP.NET Web应用程序的比较注意:已被删除,不再如此
  • .asp.net中的网站或Web应用程序


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

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

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

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

更详细的分析见:

  • 这里是Web应用程序项目和Web部署项目
  • 网站还是Web应用程序?


从MCTS自定步调训练套件考试70-515书:

With web application (project),

  • You can create an MVC application.
  • Visual Studio stores the list of files in a project file (.csproj or .vbproj), rather than relying on the folder structure.
  • You cannot mix Visual Basic and C#.
  • You cannot edit code without stopping a debugging session.
  • You can establish dependencies between multiple web projects.
  • You must compile the application before deployment, which prevents you from testing a page if another page will not compile.
  • You do not have to store the source code on the server.
  • You can control the assembly name and version.
  • You cannot edit individual files after deployment without recompiling.

  • Compilation Firstly there is a difference in compilation. Web Site is not pre-compiled on server, it is compiled on file. It may be
    an advantage because when you want to change something in your Web
    Site you can just download a specific file from server, change it and
    upload this file back to server and everything would work fine. In Web
    Application you can't do this because everthing is pre-compiled and
    you end up with only one dll. When you change something in one file of
    your project you have to re-compile everything again. So if you would
    like to have a possibility to change some files on server Web Site is
    better solution for you. It also allows many developers to work on one
    Web Site. On the other side, if you don't want your code to be
    available on server you should rather choose Web Application. This
    option is also better for Unit Testing because of one DLL file being
    created after publishing your website.

    Project structure项目的结构也存在差异。在Web应用程序中,您有一个项目文件,就像在普通应用程序中一样。在网站中没有传统的项目文件,您所拥有的只是解决方案文件。所有引用和设置都存储在web.config文件中。@Page directive对于包含与此页关联的类的文件,@page指令中有其他属性。在Web应用程序中,它是标准的"代码隐藏",在Web站点中使用"代码文件"。您可以在下面的示例中看到这一点:

    Web应用程序:

    1
    2
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"  
    Inherits="WebApplication._Default" %>

    网站:

    1
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

    Namespaces - In the example above you can see also another difference -
    how namespaces are created. In Web Application namespace is simply a
    name of the project. In Website there is default namespace ASP for
    dynamically compiled pages.

    Edit and Continue- In Web Application Edit and Continue option is
    available (to turn it on you have to go to Tools Menu, click Options
    then find Edit and Continue in Debugging). This feature is not working
    in Web Site.ASP.NET MVCIf you want to develop web applications using

    ASP.NET MVC (Model View Controller) the best and default option is
    Web Application. Although it's possible to use MVC in Web Site it's
    not recommended.

    Summary - The most important difference between ASP.NET Web Application
    and Web Site is compilation. So if you work on a bigger project where
    a few people can modify it it's better to use Web Site. But if you're
    doing a smaller project you can use Web Application as well.


    这取决于你在发展什么。

    一个面向内容的网站会经常改变其内容,而一个网站更好。

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


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

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


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

  • 在一个伞下有多个项目并建立项目之间的依赖关系。例如,对于个人电脑,我们可以在网络上有以下内容应用-

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

  • 指的是那些与独立类中的页面和用户控件关联
  • 为整个站点创建单个程序集
  • 控制为站点生成的程序集名称和版本号
  • 避免将源代码放在生产服务器上。(你可以避免正在将源代码部署到IIS服务器。在某些情况下,例如共享托管环境,您可能会担心未经授权访问IIS服务器上的源代码。(对于网络站点项目,您可以通过在开发计算机并部署生成的程序集源代码的。然而,在这种情况下,你会失去一些轻松网站更新的好处。)
  • 网站性能问题对网站的第一个请求可能需要编译该网站,这会导致延迟。如果网站运行在内存不足的IIS服务器,包括单个程序集可能使用的内存超过多个组件。)

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

    应用程序的优点是不需要重新编译,所以初始启动时间会更快。


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

    顺便说一句,不要被标题弄糊涂了,视频的很大一部分解释了网站项目和Web应用程序项目之间的区别,以及为什么Microsoft在Visual Studio 2005中重新引入Web应用程序项目(正如您可能已经知道的,它最初只与网站项目一起发布,然后添加了Web应用程序项目在SP1)。一个伟大的视频,我强烈推荐给任何想知道差异的人。


    一个"网站"在一个特殊的app_code目录中有它的代码,它在运行时被编译成几个dll(程序集)。"Web应用程序"预编译为一个DLL。


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

  • 解决方案文件与项目环境中的根目录存储在同一目录中。
  • 在项目环境中部署之前需要删除解决方案和项目文件。
  • 完整的根目录部署在无项目环境中。
  • 使用这两种方法都没有太大的基本区别。但是,如果您创建的网站需要更长的时间,请选择项目环境。


    这总是取决于客户的要求。ASP.NET只是包含了用户对应用程序的安全性和易于维护所需的灵活功能。

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

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


    Web应用程序项目模型

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

    网站项目模型

    • 没有项目文件(基于文件系统)。
    • 新的编译模型。
    • 动态编译和在不构建整个站点的情况下处理页面在每个页面视图上。
    • 同时支持IIS和内置ASP.NET开发服务器。
    • 每个页面都有自己的程序集。
    • 不同的代码模型。

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

    Web应用程序-将创建解决方案文件。如果要创建Web应用程序,则需要使用Visual Studio。它将在bin文件夹中创建单个.dll文件。


    肯定是Web应用程序,单一的DLL文件和易于维护。但是一个网站更为灵活;你可以随时编辑ASPX文件。


    网站:它会自动生成app_code文件夹,如果您将其发布到服务器上,然后如果您对任何特定文件或页面进行了一些更改,则不必编译所有文件。

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


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

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

    错误,运行时出现以下错误消息:

    1
    2
    3
    4
    Exception information:
        Exception type: HttpException
        Exception message: Exception of type 'System.OutOfMemoryException' was thrown.
       at System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()

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


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


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


    Here Web Supportive Application is an example of website.

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


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

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

    网站:可能。专业:短期福利。反对:项目混乱的长期风险。

    Web应用程序:con:不可能。编辑页面,将更改存档到源代码管理,然后生成并部署整个站点。专业:维护一个高质量的项目。

    发展问题

    网站:没有.csproj文件的简单项目结构。两个.aspx页可能具有相同的类名,不会发生冲突。导致生成错误的随机项目目录名,如.NET框架与其自己生成的文件冲突的原因和.NET框架与其自己生成的文件冲突的原因。pro:简单(简单)。Con:反复无常。

    Web应用程序:类似于WebForms项目的项目结构,带有.csproj文件。ASP页的类名必须唯一。专业:简单(智能)。反对:没有,因为网络应用程序仍然很简单。