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



Answers

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

Web应用程序是一个特殊的Visual Studio项目。 与Web站点的主要区别在于,当您构建项目时,所有代码文件都被编译为一个程序集,该程序集位于bin目录中。 您不要将代码文件部署到Web服务器。 您可以将它们放在任何位置,而不必像共享代码文件那样使用特殊文件夹,就像您在类库中所做的一样。 由于Web应用程序包含不想部署的文件(如项目和代码文件),Visual Studio中有一个Publish命令用于将Web站点输出到指定的位置。

App_Code vs Bin

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

代码隐藏

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

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

使用运行时管理代码隐藏程序集对于您而言不太方便,因为您无需担心为页/控件提供唯一名称,或将它们组织到不同的名称空间中。

我并不是说部署代码文件总是一个好主意(特别是不是共享代码文件),但代码隐藏文件应该只包含执行特定于UI的任务,线程事件处理程序等的代码。您的应用程序应该是因此重要代码总是以Bin文件夹结尾。 如果是这种情况,那么部署代码隐藏文件不应被认为是有害的。

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

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

视觉工作室

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

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

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

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

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

NuGet软件包还原在网站上不起作用,您必须手动安装packages.config中列出的软件包 Package Restore现在可用于启动NuGet 2.7的网站

Question

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

ASP.NET Web应用程序和ASP.NET网站有什么区别? 为什么我会选择其中一个呢?

答案根据我使用的是哪个版本的Visual Studio而不同?




一个“网站”的代码放在一个特殊的App_Code目录下,并且它在运行时被编译成几个DLL(程序集)。 一个“网络应用程序”被预编译成一个DLL。




这听起来有点明显,但我认为这是误解,因为Visual Studio 2005最初只与网站一起提供。 如果您的项目涉及的网站相当有限,且没有太多逻辑或物理上的分离,则该网站没有问题。 但是,如果它真的是一个具有不同模块的Web应用程序,并且许多用户添加和更新数据,那么最好使用Web应用程序。

该网站模型最大的app_codeapp_code部分中的任何内容都是动态编译的。 您可以在不进行完全重新部署的情况下制作C#文件更新。 然而,这是一个很大的牺牲。 很多事情发生在难以控制的封面之下。 由于一切都是动态编译的,所以命名空间很难控制,并且默认情况下,特定的DLL使用情况会在app_code任何地方出现。

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

如果您正在进行多层开发,我强烈建议使用Web应用程序模型。 如果您正在进行有限的网站或快速而肮脏的实施,则网站模型可能具有优势。

更详细的分析可以在下面找到:




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

为什么? 因为在尝试更改或理解您的项目时,网站项目会将您推上墙。 Visual Studio中的静态类型查找功能(例如,查找用法,重构)将永远在任何合理大小的项目上使用。 有关更多信息,请参阅Visual Studio中的“查找所有引用”缓慢的堆栈溢出问题。

我真的不明白为什么他们放弃了Visual Studio 2005中的Web应用程序,因为它引发了令人痛苦的,完整的,生产力carb web网站项目类型。




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




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

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




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

Project structure也有所不同。 在Web应用程序中,您有一个项目文件,就像您在正常的应用程序中一样。 在网站上没有传统的项目文件,只有解决方案文件。 所有的参考和设置都存储在web.config文件中。 @Page directive对于包含与此页面关联的类的文件,@Page @Page directive有一个不同的属性。 在Web应用程序中,它是标准的“CodeBehind”,在您使用“CodeFile”的网站中。 你可以在下面的例子中看到这个:

Web Application:

<%@ 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应用程序编辑并继续选项可用(打开它你必须去工具菜单,单击选项,然后找到编辑并继续调试)。 此功能在Web Site.ASP.NET MVCIf中不起作用,您希望使用它开发Web应用程序

ASP.NET MVC(模型视图控制器)最好的和默认的选择是Web应用程序。 虽然可以在网站中使用MVC,但不建议这样做。

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




其中一个主要区别是网站动态编译并创建即时组件。 网络应用程序编译成一个大型程序集。

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




在Web应用程序中,您可以创建项目功能的各个层次,并可以通过将它们分成许多项目来创建它们之间的相互依赖关系,但是您绝对不能在网站上执行此操作。




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

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




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

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




Web应用程序项目模型

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

网站项目模型

  • 没有项目文件(基于文件系统)。
  • 新的编译模型。
  • 动态编译和在页面上工作,而无需在每个页面视图上构建整个站点。
  • 支持IIS和内置的ASP.NET Development Server。
  • 每个页面都有它自己的程序集。
  • 不同的代码模型。





Links