Answers:
网站:
该网站项目被编译的飞行。您最终将获得更多的DLL文件,这可能很痛苦。当您在一个目录中有页面或控件需要引用另一目录中的页面和控件时,这也会带来问题,因为该另一目录可能尚未编译到代码中。另一个问题可能在发布中。
如果不要求Visual Studio不断重复使用相同的名称,它将为页面始终生成的DLL文件提供新的名称。这可能导致包含相同类名的DLL文件的多个紧密副本,这将产生大量错误。该Web站点项目是随Visual Studio 2005一起引入的,但事实证明它并不受欢迎。
Web应用程序:
在Web应用程序项目创建为一个附加的和现在存在作为Visual Studio的SP 1的一部分,2005年的主要区别是在Web应用程序项目旨在类似于Web项目的工作,随Visual Studio的2003年,将在构建时将应用程序编译为单个DLL文件。为了更新项目,必须重新编译它并发布DLL文件以进行更改。
Web应用程序项目的另一个不错的功能是,从项目视图中排除文件要容易得多。在网站项目中,您排除的每个文件都用文件名中的排除关键字重命名。在Web应用程序项目中,该项目仅跟踪要从项目视图中包含/排除的文件,而无需重命名它们,从而使工作变得更加整洁。
“ ASP.NET 2.0-网站与Web应用程序”项目一文也提供了为什么使用一个而不使用另一个的原因。这是它的摘录:
- 您需要将大型Visual Studio .NET 2003应用程序迁移到VS 2005吗?使用Web应用程序项目。
- 您要在不创建项目文件的情况下作为Web项目打开和编辑任何目录吗?使用网站项目。
- 您需要在编译期间添加构建前和构建后步骤吗? 使用Web应用程序项目。
- 您需要使用多个Web项目来构建Web应用程序吗?使用Web应用程序项目。
- 您要为每个页面生成一个程序集吗?使用网站项目。
- 您希望动态编译和处理页面而不在每个页面视图上构建整个网站?使用网站项目。
- 您更喜欢单页代码模型而不是代码隐藏模型?使用网站项目。
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中有一个Publish命令,可以将网站输出到指定位置。
部署共享代码文件通常不是一个好主意,但这并不意味着您必须选择Web应用程序。您可以拥有一个引用类库项目的网站,该项目包含该网站的所有代码。Web应用程序只是一种方便的方法。
本主题特定于.aspx和.ascx文件。在不使用代码隐藏文件的新应用程序框架(例如ASP.NET MVC和ASP.NET Web页)中,此主题的重要性与日俱增。
通过将所有代码文件(包括.aspx页和.ascx控件的代码隐藏文件)编译到单个程序集中,在Web应用程序中,您必须为每个小的更改重新构建,并且无法进行实时更改。在开发过程中,这可能是一个真正的痛苦,因为您必须继续重建以查看更改,而使用Web站点时,运行时会检测到更改,并且页面/控件会自动重新编译。
让运行时管理后台程序集的代码对您来说工作量较小,因为您不必担心为页面/控件提供唯一的名称,也不必将它们组织到不同的命名空间中。
我并不是说部署代码文件总是一个好主意(特别是在共享代码文件的情况下),但是代码隐藏文件应仅包含执行UI特定任务,连线事件处理程序等的代码。分层,以便重要的代码始终位于Bin文件夹中。如果是这种情况,那么不应将代码隐藏文件部署在有害位置。
Web应用程序的另一个限制是您只能使用项目的语言。在网站中,您可以使用C#编写某些页面,使用VB编写某些页面,等等。不需要特殊的Visual Studio支持。这就是构建提供程序可扩展性的优点。
另外,在Web应用程序中,页面/控件中没有错误检测功能,因为编译器仅编译您的代码隐藏类,而不编译在运行时编译的标记代码(在MVC中,您可以使用MvcBuildViews选项修复该代码)。
由于Web应用程序是Visual Studio项目,因此您可以获得一些网站中不可用的功能。例如,您可以使用构建事件来执行各种任务,例如缩小和/或组合Javascript文件。
Visual Studio 2010中引入的另一个不错的功能是Web.config转换。这在网站中也不可用。 现在可以在VS 2013中使用网站。
构建Web应用程序比构建Web站点要快,特别是对于大型站点而言。这主要是因为Web应用程序不编译标记代码。在MVC中,如果将MvcBuildViews设置为true,则它将编译标记代码并获得错误检测,这非常有用。不利的一面是,每次构建解决方案时,它都会构建完整的站点,这可能会很慢且效率低下,特别是如果您不编辑站点。我发现自己打开和关闭MvcBuildViews(这需要卸载项目)。另一方面,对于“网站”,您可以选择是否要将网站构建为解决方案的一部分。如果您选择不这样做,则构建解决方案的速度非常快,并且如果进行了更改,则始终可以单击“网站”节点并选择“构建”。
在MVC Web应用程序项目中,您具有用于常见任务的其他命令和对话框,例如“添加视图”,“转到视图”,“添加控制器”等。这些在MVC网站中不可用。
如果使用IIS Express作为开发服务器,则可以在网站中添加虚拟目录。此选项在Web应用程序中不可用。
NuGet软件包还原在网站上不起作用,您必须手动安装在packages.config上列出的软件包软件包还原现在可与从NuGet 2.7开始的网站一起使用
除非您特别需要动态编译的项目,否则不要使用网站项目。
为什么?因为在尝试更改或了解您的项目时,网站项目将使您无所适从。Visual Studio中的静态类型查找功能(例如查找用法,重构)将永久占用任何大小合理的项目。有关更多信息,请参见Visual Studio中的堆栈溢出问题慢速“查找所有引用”。
我真的不明白为什么他们将Web应用程序丢弃在Visual Studio 2005中,以减轻痛苦,浪费精力,生产力降低网站项目类型。
MSDN中有一篇文章描述了这些区别:
顺便说一句:关于该主题也有一些类似的问题,例如:
这听起来似乎有些明显,但是我认为这是一个被误解的原因,因为Visual Studio 2005最初只是随网站一起提供的。如果您的项目所处理的网站是相当有限的,并且没有太多的逻辑或物理隔离,则该网站很好。但是,如果它确实是具有许多模块的Web应用程序,其中许多用户可以在其中添加和更新数据,那么使用Web应用程序会更好。
网站模型的最大优点是本app_code
节中的所有内容都是动态编译的。您无需完全重新部署即可进行C#文件更新。但是,这是一个巨大的牺牲。很多事情都是在难以控制的情况下发生的。命名空间很难控制,并且默认情况下,app_code
由于所有内容都是动态编译的,因此在任何情况下,特定DLL的使用都无法使用。
Web应用程序模型没有动态编译,但是您可以控制我提到的内容。
如果您要进行n层开发,我强烈建议您使用Web应用程序模型。如果您正在做一个有限的网站或快速而肮脏的实施,则网站模型可能具有优势。
可以在以下位置找到更详细的分析:
从MCTS自定进度培训套件考试70-515本书中:
使用网络应用程序(项目),
- 您可以创建一个MVC应用程序。
- Visual Studio将文件列表存储在项目文件(.csproj或.vbproj)中,而不是依赖于文件夹结构。
- 您不能混合使用Visual Basic和C#。
- 您必须停止调试会话才能编辑代码。
- 您可以在多个Web项目之间建立依赖关系。
- 您必须在部署之前编译应用程序,这样可以防止您在无法编译另一个页面的情况下测试该页面。
- 您不必将源代码存储在服务器上。
- 您可以控制程序集名称和版本。
- 部署后,如果不重新编译就无法编辑单个文件。
Compilation
首先,编译存在差异。网站未在服务器上预编译,而是在文件上编译。这可能是一个优点,因为当您要更改网站中的某些内容时,您可以只从服务器下载特定文件,然后对其进行更改并将其上传回服务器,这样一切都会正常进行。在Web应用程序中,您无法执行此操作,因为所有内容都已预先编译,并且最终只有一个dll。当您在项目的一个文件中更改某些内容时,必须再次重新编译所有内容。因此,如果您想更改服务器网站上的某些文件,则是更好的解决方案。它还允许许多开发人员在一个网站上工作。另一方面,如果您不希望代码在服务器上可用,则应选择“ Web应用程序”。
Project structure
项目的结构也有所不同。在Web应用程序中,您有一个项目文件,就像在普通应用程序中一样。在Web站点中,没有传统的项目文件,您只有解决方案文件。所有参考和设置都存储在web.config文件中。
@Page directive
@Page指令中包含与该页面关联的类的文件具有不同的属性。在Web应用程序中,它是标准的“ CodeBehind”,在网站中,您可以使用“ 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" %>
命名空间-在上面的示例中,您还可以看到另一个区别-命名空间的创建方式。在Web应用程序中,名称空间只是项目的名称。在“网站”中,有用于动态编译页面的默认名称空间ASP。
编辑并继续-在Web应用程序中,“编辑并继续”选项可用(要打开它,您必须转到“工具”菜单,单击“选项”,然后在调试中找到“编辑并继续”)。如果要使用Web开发网站应用程序,则此功能在Web Site.ASP.NET MVC中不起作用
ASP.NET MVC(模型视图控制器)的最佳和默认选项是Web应用程序。尽管可以在网站中使用MVC,但不建议这样做。
摘要-ASP.NET Web应用程序和网站之间最重要的区别是编译。因此,如果您在一个较大的项目上工作,可以由几个人进行修改,则最好使用网站。但是,如果您正在做一个较小的项目,则也可以使用Web应用程序。
是的,Web应用程序比网站要好得多,因为Web应用程序为我们提供了自由:
在一个保护伞下拥有多个项目并在它们之间建立项目依赖关系。例如,对于PCS,我们可以在网络应用程序中包含以下内容:
在与ASP.NET页关联的类文件中的代码上运行单元测试
主要区别之一是网站可以动态编译并创建即时程序集。Web应用程序可编译为一个大型程序集。
在Visual Studio 2008中已经消除了两者之间的区别。
应用程序通常在部署之前进行编译,因为网站会使用app_code目录。当应用程序代码文件夹中的任何内容发生更改时,服务器将重新编译代码。这意味着您可以随时随地在网站上添加/更改代码。
应用程序的优点是无需重新编译,因此初始启动时间将更快。
我建议您在ASP.NET网站上观看视频Web应用程序项目和Web部署项目,该视频详细解释了两者之间的差异,这对我很有帮助。
顺便说一下,不要被标题弄糊涂,视频的很大一部分解释了网站项目和Web应用程序项目之间的区别,以及Microsoft为什么在Visual Studio 2005中重新引入了Web应用程序项目(您可能已经知道,最初仅与网站项目一起提供,然后在SP1中添加了Web应用程序项目)。对于任何想知道两者之间的区别的人,我强烈推荐一个很棒的视频。
“网站”的代码位于特殊的App_Code目录中,并且在运行时被编译为多个DLL(程序集)。“ Web应用程序”被预编译为一个DLL。
网站和项目>>网站是使用Visual Studio创建ASP.NET应用程序的两种不同方法。一个是没有项目的,另一个是项目环境。差异如下
使用这两种方法都没有太大的基本区别。但是,如果要创建将花费较长时间的网站,请选择项目环境。
Web应用程序项目模型
网站项目模型
网站-将不会创建解决方案文件。如果我们要创建网站,则无需Visual Studio。
Web应用程序-将创建一个解决方案文件。如果要创建Web应用程序,则需要Visual Studio。它将.dll
在bin文件夹中创建一个文件。
WebSite:它会自动生成app_code文件夹,如果您将其发布在服务器上,然后再对任何特定的文件或页面进行某些更改,则不必编译所有文件。
Web应用程序它会自动生成网站不会生成的解决方案文件,如果只更改一个文件,则必须编译整个项目以反映其更改。
在Web应用程序中,您可以创建项目功能的各个层,并且可以通过将其划分为多个项目来在它们之间创建相互依赖关系,但是您永远不能在网站上做到这一点。
Web应用程序需要更多的内存,大概是因为您别无选择,只能编译为单个程序集。我只是将一个大型的旧站点转换为Web应用程序,并且在编译时遇到如下所示的错误消息时,内存用尽都有问题:
Unexpected error writing metadata to file '' --
Not enough storage is available to complete this operation.
错误,并在运行时显示以下错误消息:
Exception information:
Exception type: HttpException
Exception message: Exception of type 'System.OutOfMemoryException' was thrown.
at System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()
我建议在受内存限制的旧硬件上转换较大的站点,是选择该选项以还原为网站模型。即使在最初取得成功之后,问题也可能在稍后蔓延。
总结上面的一些答案:
灵活性,您可以实时更改网页吗?
网站:可能。优点:短期利益。缺点:项目混乱的长期风险。
Web App:缺点:不可能。编辑页面,将更改归档到源代码管理,然后构建和部署整个站点。优点:保持高质量的项目。
发展问题
网站:没有.csproj文件的简单项目结构。两个.aspx页可能具有相同的类名,而不会发生冲突。随机的项目目录名称会导致生成错误,例如.net framework为什么与自己生成的文件冲突以及.net Framework为什么与其自己生成的文件冲突。优点:简单(简单)。缺点:不稳定。
Web App:项目结构类似于WebForms项目,带有.csproj文件。ASP页面的类名称必须唯一。优点:简单(智能)。缺点:没有,因为网络应用仍然很简单。