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

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

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应用程序项目的另一个很好的功能是从项目视图中排除文件更加容易。 在网站项目中,您排除的每个文件都使用文件名中的排除关键字进行重命名。 在Web应用程序项目中,项目只是跟踪哪些文件包含/从项目视图中排除,而无需重命名它们,使整理更加整洁。

参考

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

  • 您需要将大型Visual Studio .NET 2003应用程序迁移到VS 2005? 使用Web应用程序项目。
  • 你想打开并编辑任何目录作为Web项目而不创建项目文件? 使用网站项目。
  • 您需要在编译期间添加预构建和后构建步骤? 使用Web应用程序项目。
  • 您需要使用多个Web项目来构建Web应用程序? 使用Web应用程序项目。
  • 你想为每个页面生成一个程序集? 使用网站项目。
  • 您更喜欢动态编译和在页面上工作而不在每个页面视图上构建整个站点? 使用网站项目。
  • 你更喜欢单页面的代码模型来代码隐藏模型? 使用网站项目。
  • Web应用程序项目与网站项目(MSDN)解释了网站和Web应用程序项目之间的差异。 另外,它还讨论了在Visual Studio中进行的配置。


    网站是您部署到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控件的代码隐藏文件,在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


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

    Web应用程序 =在程序员创建应用程序时使用,图形设计师只编辑一个或两个分页/图像。

    Web站点可以使用任何HTML工具进行工作,而无需开发人员工作室,因为项目文件不需要更新等。当团队主要使用developer studio并且代码量很大时,Web应用程序是最好的。

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

    警告: 我多年前写了这个答案,并没有使用过Asp.net。 我预计现在事情已经转移。

    链接地址: http://www.djcxy.com/p/17177.html

    上一篇: ASP.NET Web Site or ASP.NET Web Application?

    下一篇: Adding Service Reference address in Workflow Service