ASP.NET 网站还是 ASP.NET Web 应用程序?

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

提问人:Robert S. 提问时间:12/30/2008 最后编辑:TylerHRobert S. 更新时间:11/22/2023 访问量:266155

问:

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

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

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

asp.net visual-studio 、web-site-project 和 web-application-project

评论

10赞 Gustav 11/18/2016
有关 MSDN 的完整和更新(针对 4.5)的比较和解释:Visual Studio 中的 Web 应用程序项目与网站项目

答:

567赞 12 revs, 9 users 61%Andreas Grech #1

网站:

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

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

Web 应用程序:

Web 应用程序项目是作为外接程序创建的,现在作为一部分存在 适用于 Visual Studio 2005 的 SP 1。主要区别在于 Web 应用程序项目 其工作方式类似于 Visual Studio 2003 附带的 Web 项目。它会在生成时将应用程序编译为单个 DLL 文件 时间。若要更新项目,必须重新编译它并 DLL 文件 发布以进行更改。

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

参考

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

  • 您需要将大型 Visual Studio .NET 2003 应用程序迁移到 VS 2005?使用 Web 应用程序项目。
  • 您希望将任何目录作为 Web 项目打开和编辑,而无需 正在创建项目文件?使用网站 项目。
  • 您需要在编译过程中添加构建前和构建后步骤吗?使用 Web 应用程序项目。
  • 您需要使用多个 Web 构建一个 Web 应用程序 项目?使用 Web 应用程序项目。
  • 是否要为每个页面生成一个程序集?使用“网站”项目。
  • 您更喜欢动态编译和在不构建的情况下处理页面 整个网站在每次页面浏览?使用 Web 网站项目。
  • 您更喜欢单页代码模型而不是代码隐藏模型?使用网站 项目。

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

评论

6赞 dtc 1/1/2009
您仍然可以使用基于文件的网站将整个网站编译成一个 dll。
32赞 Ian Ringrose 6/26/2009
我倾向于这样想。如果您正在编写一个恰好使用 HTML 作为 UI 的应用程序,请使用 Web 应用程序。如果您有一个网站恰好需要对其某些页面进行一些 Asp.net,请使用网站项目。
37赞 John Saunders 6/30/2009
实际上,Web 应用程序项目正是原始的 ASP.NET 项目类型。它们与我们在 Visual Studio 2003 中的项目“不同”。它们不是作为加载项创建的。Visual Studio 2005 SP1 只是还原了 Visual Studio 2005 RTM 错误删除的内容。
2赞 Stefan Steiger 8/7/2010
可以在 WebDeployment 项目中使用 WebApplication 输出。不能在 WebDeployment 项目中使用 WebSite 输出。如果要创建部署项目,请坚持使用 WebApplication。但对于开发来说,网站更方便。但是,转换并不总是没有问题,因此请立即从 WebApplication 开始。
9赞 John Saunders 12/12/2013
@xarzu:网站“项目”没有 .csproj 或 .vbproj 文件。它们不是真正的项目 - 它们只是装满文件的文件夹。
25赞 Daniel Auger 12/30/2008 #2

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

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

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

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

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

评论

4赞 Rob Nicholson 8/21/2009
>网站模型的最大优点是app_code部分的任何内容都是动态编译的。这也有一个很大的缺点。我的网站由webhost4life托管,他们便宜但功能丰富。缺点是它们非常频繁地回收工作进程(15 分钟?),这意味着当应用程序重新编译时,下一个用户的第一页输出速度非常慢。
33赞 M4N 1/24/2009 #3

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

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

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

评论

1赞 frenchone 4/16/2018
我想关于我应该在标记中使用代码文件或代码隐藏的答案已经消失了,答案被 SO 删除了......
1赞 frenchone 4/16/2018
因此,对于那些想知道的人:Web 应用程序 = 结构良好的解决方案 = 标记中的代码隐藏 VS 网站 = 一堆文件 = 标记中的代码文件
0赞 EJoshuaS - Stand with Ukraine 11/22/2023
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。- 从评论
17赞 AnthonyWJones 1/24/2009 #4

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

一个以内容为导向的网站会经常改变其内容,而网站更适合这一点。

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

11赞 Sam Cogan 1/24/2009 #5

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

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

评论

5赞 Zhaph - Ben Duguid 1/24/2009
“在vs2008中,两者之间的区别已经消除” - 不知道你的意思 - 它们在VS2008中仍然是不同的项目类型,行为不同,并且通过不同的菜单选项创建 - 但是至少它们在VS2008中默认可用。
75赞 Ian Ringrose 3/4/2009 #6

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

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

可以使用任何 HTML 工具处理网站,而无需开发人员工作室,因为项目文件不需要更新等。当团队主要使用开发人员工作室并且代码内容很高时,Web 应用程序是最好的。

(编译时在 Web 应用程序中发现某些编码错误,而这些错误在运行时才在网站中发现。

警告:我多年前写了这个答案,从那以后就没有使用过 Asp.net。我预计事情现在已经发生了变化。

175赞 Max Toro 3/10/2009 #7

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

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

App_Code vs Bin

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

代码隐藏

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

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

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

我并不是说部署代码文件总是一个好主意(尤其是在共享代码文件的情况下),但代码隐藏文件应该只包含执行 UI 特定任务、连接事件处理程序等的代码。应用程序应分层,以便重要代码始终位于 Bin 文件夹中。如果是这种情况,则不应将部署代码隐藏文件视为有害文件。

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

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

Visual Studio的

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

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

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

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

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

NuGet 包还原在网站上不起作用,必须手动安装 packages.config 上列出的包包还原现在适用于从 NuGet 2.7 开始的网站

评论

43赞 Ian Ringrose 6/24/2009
因为程序员编写了应用程序,所以应用程序随后被构建。测试团队在测试系统上测试应用程序。然后,客户安装应用程序。你最后认为你想要的是任何人进行实时更改!
12赞 Max Toro 8/26/2009
对我来说,有选择是最好的,在网站上,如果你愿意,你总是可以从预编译的基类继承。有许多语言/框架(例如.PHP)人们习惯于部署源代码的想法。这并不意味着这些不是“严肃”的应用程序。
6赞 Zhaph - Ben Duguid 10/25/2009
“实际上,你不管理那些DLL,[...]你甚至不必知道它们的存在。不是问题。 - 直到框架变得混乱,没有正确清理旧版本,并开始在整个站点上抛出名称冲突的编译异常......可以通过使用 WebDeployment 项目添加标记的错误检测。我也不确定你的最后一点“对于网站,你可以使用 IIS 作为服务器”,你也可以用 Web 应用程序来做到这一点 - 我有这样的项目,其中项目是更大的 Web 应用程序的一部分。
3赞 NikoRoberts 6/2/2011
部署网站并不总是必须部署到实时服务器。在理想情况下,开发迭代应该在实时环境的镜像上进行测试。由于 Web 应用无法对在开发 IIS 服务器上运行的站点进行快速代码更改(即不使用本地 VS 实例运行),因此测试快速小型解决方案非常痛苦。在无法在本地计算机上复制相同条件的系统中,这种情况一直发生。
4赞 Darren 3/3/2014
“在开发过程中,这可能是一个真正的痛苦,因为你必须不断重新构建才能看到变化”......请记住,它必须是一个巨大的项目或一台非常旧的计算机,这些天进行重建会很痛苦。
43赞 ninj 7/16/2009 #8

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

为什么?因为网站项目在试图改变或理解你的项目时会把你推到墙上。Visual Studio 中的静态类型查找功能(例如查找用法、重构)在任何大小合理的项目中都将永远占用。有关详细信息,请参阅 Visual Studio 中的 Stack Overflow 问题“查找所有引用”速度慢

我真的不明白为什么他们在 Visual Studio 2005 中放弃了 Web 应用程序,转而使用令人痛苦、耗费理智、生产力痈的网站项目类型。

评论

0赞 jroyce 6/28/2021
我只是亲身经历过。最初构建了一个网站项目,后来需要添加 API,并陷入了许多死胡同。现在切换到 Web 应用程序项目。
9赞 Daisy Moon 8/16/2009 #9

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

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

评论

0赞 Amr H. Abd Elmajeed 12/23/2010
这在一定程度上是正确的,如果你愿意,你可以在网站上预编译页面
9赞 Waleed Eissa 9/28/2009 #10

我建议您观看 ASP.NET 网站上的视频 Web 应用程序项目和 Web 部署项目,它非常详细地解释了其中的区别,这对我非常有帮助。

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

评论

0赞 Bob Reynolds 12/26/2015
该视频现在位于:asp.net/web-forms/videos/vs-2005/...
19赞 YuMei 7/7/2011 #11

摘自 MCTS 自定进度培训套件考试 70-515 书籍:

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

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

评论

0赞 John Saunders 3/11/2015
#4 是错误的。可以启用“编辑并继续”,但有一些限制。也许这在2011年是真的。#9 应该说“如果不重新编译,你就无法编辑单个源代码文件”。您可以编辑 .aspx、.js、.css 等,而无需重新编译。
0赞 wayfarer 3/11/2015
#4 有另一个角度。如果使用“文件”>“打开网站”打开>网站并导航到该网站的文件系统文件夹,而不是通过从“开始”窗口中选择解决方案来打开网站,则可以在不停止调试的情况下编辑类模块和代码隐藏(至少在 vb.net 中)。在重新生成之前,你不会看到这些更改,但是,在修改代码时能够监视页面行为通常很有用。缺点是你会丢失解决方案中的所有内容:断点、打开的文件、书签等。有时您必须删除 sln/sou 文件。
6赞 Chaturvedi Dewashish 5/9/2012 #12

Website 和 Project>>website 是使用 Visual Studio 创建应用程序 ASP.NET 两种不同的方法。 一种是无项目,另一种是项目环境。区别如下

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

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

评论

1赞 John Saunders 8/31/2012
解决方案文件不必位于同一文件夹中。此外,标准发布机制会删除不应位于目标站点中的任何项目,例如,未部署代码隐藏文件。
7赞 md adilahmed 6/18/2012 #13

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

3赞 Goodmedalist 7/5/2012 #14

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

4赞 jovenb 7/5/2012 #15

这始终取决于客户的要求。ASP.NET 仅包含用户所需的灵活功能,以实现应用程序的安全性和易于维护。

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

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

3赞 Nagaraj P 8/28/2012 #16

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

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

评论

2赞 Darren 3/3/2014
-1 如果您通过 Visual Studio 创建网站项目,您实际上确实有一个解决方案文件。您没有项目文件。
0赞 frenchone 4/16/2018
+1 当然,您可以创建一个解决方案文件,但这个文件大部分是空的,所以它只是一个烦恼(VS 询问退出时将文件保存在哪里),而不是有用的东西
5赞 user1855471 12/19/2012 #17

Web 应用程序项目模型

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

网站项目模型

  • 无项目文件(基于文件系统)。
  • 新的编译模型。
  • 动态编译和处理页面,而无需构建整个网站 在每个页面视图上。
  • 支持 IIS 和内置的 ASP.NET Development Server。
  • 每个页面都有自己的程序集。
  • 不同的代码模型。
16赞 Himanshu 1/3/2013 #18

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

Project structure

项目的结构也存在差异。在 Web 应用程序中,您有一个项目文件,就像在普通应用程序中一样。在网站中,没有任何传统的项目文件;您所拥有的只是一个解决方案文件。所有引用和设置都存储在 web.config 文件中。

@Page directive

@Page指令中有一个不同的属性,用于包含与此页关联的类的文件。在 Web 应用程序中,它是标准的“CodeBehind”,在 Web 站点中,您使用“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 Site.ASP.NET MVCIif 中,如果要使用

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

摘要 - Web 应用程序 ASP.NET 最重要的区别 和网站是编译。因此,如果你从事一个更大的项目,其中 几个人可以修改它,最好使用网站。但如果你是 做一个较小的项目,你也可以使用Web应用程序。

评论

0赞 John Saunders 3/11/2015
在多个人更改它的大型项目中,您使用源代码管理,因此这不是使用网站“项目”的理由。
0赞 frenchone 4/16/2018
+1 表示 Code Behind (WebApp) 与 Code File (Website) in page 指令的区别。这是所选答案所缺乏的精确度。
2赞 gadasadox 1/21/2013 #19

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

评论

0赞 John Saunders 3/11/2015
您也可以在 Web 应用程序项目中编辑 aspx 文件。
11赞 Nilesh Rathod 4/4/2013 #20

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

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

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

  3. 要引用这些类,这些是 与独立类中的页面和用户控件相关联

  4. 为整个站点创建单个程序集

  5. 控制为站点生成的程序集名称和版本号

  6. 避免将源代码放在生产服务器上。(您可以避免 将源代码部署到 IIS 服务器。在某些情况下,例如 您可能担心的共享主机环境 未经授权访问 IIS 服务器上的源代码。(对于网络 site 项目,您可以通过在 开发计算机并改为部署生成的程序集 的源代码。但是,在这种情况下,您将丢失一些 轻松更新网站的好处。

  7. 网站性能问题( 对网站的第一个请求可能需要对网站进行编译, 这可能会导致延迟。如果网站在 内存不足的 IIS 服务器,包括 单个程序集使用的内存可能多于 多个程序集。

评论

1赞 Peter Mortensen 11/22/2023
这个答案的大部分(如果不是全部)都是抄袭的结果。例如,从 Visual Studio 中的 Microsoft 页面“Web 应用程序项目与网站项目”。
0赞 Peter Mortensen 11/22/2023
cont' - 例如,确切的短语(稍作修改)“您可以避免将源代码部署到 IIS 服务器。在某些情况下,例如共享宿主环境,您可能会担心对 IIS 服务器上的源代码进行未经授权的访问。对于网站项目,可以通过在开发计算机上进行预编译并部署生成的程序集(而不是源代码)来避免此风险。但是,在这种情况下,您将失去轻松更新网站的一些好处。
0赞 Peter Mortensen 11/22/2023
续'。以及确切的短语“对与 ASP.NET 页面关联的类文件中的代码运行单元测试”
0赞 Peter Mortensen 11/22/2023
con't - 以及确切的短语“对网站的第一个请求可能需要编译网站,这可能会导致延迟。而且,如果网站在内存不足的 IIS 服务器上运行,则将整个站点包含在单个程序集中可能会使用比多个程序集所需的内存更多的内存。
0赞 TylerH 11/23/2023
@PeterMortensen 在这种情况下,您应该将其标记为抄袭并链接到来源。
3赞 Mukesh Kumar 1/2/2014 #21

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

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

评论

1赞 John Saunders 3/11/2015
“编译完整项目”并不意味着编译项目中的每个文件。未更改的源代码文件将不会重新编译。
2赞 cdonner 9/24/2014 #22

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()

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

评论

0赞 John Saunders 3/11/2015
这似乎不是编译时的异常。
3赞 Imran Chaudhary 10/28/2014 #23

在 Web 应用程序中,您可以创建项目功能层,也可以通过将项目划分为多个项目来创建它们之间的相互依赖关系,但您永远不能在网站上执行此操作。

0赞 user4022749 1/6/2016 #24

Here is a Web Supportive Application. It is an example of a website.

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

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

评论

1赞 frenchone 4/16/2018
这不适用于 asp.net。网站/Web 应用程序的区别(用 asp.net 术语来说)更多的是关于文件是如何组织(作为一个组织良好的解决方案或一堆文件)和编译的(“JIT”与静态)。在这两种情况下,“程序”主要是服务器端。
1赞 Roland 2/12/2018 #25

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

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

网站:可能。优点:短期利益。缺点:项目混乱的长期风险。

Web 应用程序:缺点:不可能。编辑页面,将更改存档到源代码管理,然后生成和部署整个网站。优点:保持高质量的项目。

发展问题

网站:没有 .csproj 的简单项目结构 没有冲突。导致生成错误的随机项目目录名称,例如为什么 .NET Framework 与其自己生成的文件冲突?和为什么 .NET Framework 与其自己生成的文件冲突?优点:简单(简单)。缺点:不稳定。

Web 应用程序:项目结构类似于 WebForms 项目,具有 .csproj 文件。asp 页的类名必须是唯一的。优点:简单(智能)。缺点:没有,因为 Web 应用程序仍然很简单。