Visual Studio中“网站”和“项目”之间的区别[重复]

Posted

技术标签:

【中文标题】Visual Studio中“网站”和“项目”之间的区别[重复]【英文标题】:Difference between 'Web Site' and 'Project' in Visual Studio [duplicate] 【发布时间】:2010-10-10 01:59:23 【问题描述】:

可能重复:ASP.NET: Web Site or Web Application?

我注意到,当您启动 Visual Studio 2008 并选择 'New Project' -> 'ASP.NET Web Application' 而不是 '新网站' -> 'ASP.NET 网站'。例如,如果您选择“项目”,那么您可以编译为 .dll,并且每个页面都会获得一个 *.aspx.designer.cs 代码隐藏文件。

1) 为什么我们有这两种不同的项目类型?

2) 你更喜欢哪一个?

3) 为什么我会选择其中一个?

4) *.aspx.designer.cs 文件是怎么回事?

【问题讨论】:

***.com/questions/590501/… 【参考方案1】:

他们有不同的目的。

网站是一个内容可能会随着时间而变化的网站,即页面本身也会发生变化。没有实际的项目文件,站点只是作为一组文件部署。

应用程序是一个站点,其中内容只是应用程序,动态部分将主要在数据库等持久存储中。它将具有更复杂的逻辑,因为它可能代表一组用于数据输入的表单以及检查内容的手段。它有一个项目文件来更严格地控​​制其配置,并将其代码部署为已编译的 dll。

【讨论】:

请注意,您可以根据个人喜好选择使用任一项目类型来满足相同的业务需求。 @Ian - 并非如此,站点模型有几个业务级别的缺点,并且只有微不足道的收益。 这是不正确的;它们都能够完成相同的任务(网站也可以编译为 dll) @John:有各种各样的部署场景,我是在描述项目类型的目的,如果您要将网站部署为编译的 dll,为什么不使用合适的项目?跨度> 【参考方案2】:

1) 'web site' 模型是在 ASP.NET 2.0 中引入的,'web application' 模型是原始 .net 框架的项目类型。它们都有不同的用途(见下文)。

2) 这取决于上下文。一个很好的例子是,如果您正在销售软件产品,您可能希望使用“Web 应用程序”项目,因为它自然适合于干净编译的代码。

3) 见上文,个人喜好,保养特点。 “网站”允许您做的一件有趣的事情可能会给您带来很多麻烦,那就是在网站运行时对记事本中的代码隐藏(通常是 *.cs 或 *.vb)文件进行任意更改。

4) Designer.cs 文件用于存储自动生成的代码。 “此代码由工具生成。”

MSDN Article describing the differences Similar *** question

【讨论】:

"'web site' 模式是在 ASP.NET 2.0 中引入的,'web application' 模型是'original'"。尴尬。 关于 (1):Web 应用程序项目是 VS 2005 中引入的,作为 VS 2003 的 Web 项目的替代品。 See here。关于 (3):仅当站点发布为可更新时,您才能更改此代码。如果没有,发布的网站上甚至不会有 *.cs 或 *.vb。【参考方案3】:

我不会重复 2 的定义,因为刚刚得到了回答。

那么为什么要使用一个而不是另一个呢?

Web 站点让您可以将其视为 php 或经典 ASP 站点,您可以在其中进行立即生效的内联更改。

优点

您可以直接在 Web 服务器上对网站进行调整 部署就像复制文件夹一样简单

缺点

如果您没有在实时站点上进行更改,您可能会遇到更改管理问题,您会忘记让所有文件保持同步 您可以向最终用户显示运行时语法错误,因为检查的唯一方法是手动运行每个页面

Web 应用程序让您可以像对待桌面应用程序一样对待它 - 有一个可部署在您的机器上编译。

优点

清晰、结构化的变更管理。您不能意外混合来自两个不同版本的代码。当涉及 2 个人时,这一点可能很重要 - 一个编写代码,一个负责将文件放到服务器上。

因为你是在你的机器上编译它,所以此时所有的东西都会得到语法检查*

缺点

部署比从开发机器复制文件夹要复杂一些。然而,“发布”命令的使用极大地简化了编译和组合应该复制到 Web 服务器的文件的过程。

任何更改都需要在您的机器上完成、编译,并将一个全新的版本发送到 Web 服务器*

*如果你在你的构建选项中打开它,aspx/html 文件只是语法检查。也可以在服务器上编辑这些文件,除非它们被编译到您的项目中。

【讨论】:

对于 web 应用程序类型,如果您重新发布,覆盖项目的 DLL,而用户仍在网站上,会发生什么情况?我需要为我的项目知道这一点,但这不值得一个新的 SO 问题。 就我个人而言,我不会直接发布到站点,而是使用暂存文件夹。覆盖 DLL 会导致短暂的暂停,然后运行下一个请求。请记住 - 更新 重新启动 应用程序。对于企业情况,您应该使用维护计划,而不是意外更新【参考方案4】:

简单的答案如下:

    新网站 - 在页面被请求时在服务器编译的页面后面创建代码。 新的 Web 项目 - 将预编译页面创建到一个或多个程序集(甚至整个站点)中,并部署在服务器上。

场景 #1 - 如果黑客获取了您的代码隐藏文件,则任何数据库密码都会暴露。这些页面是在请求时编译的。您可以选择将所有内容预编译成一个大型程序集。如果没有,服务器上的负载就会增加。

场景 #2 - 如果黑客获取了您的程序集,它们将被混淆。混淆的程序集更难破解。这些程序集是预编译的,从而减少了服务器的负载。

更多信息:

Introduction to Web Application Projects

【讨论】:

我错误地支持了这个答案,无法撤回我的投票。你对场景 1 和 2 的观点基本上是不相关的,如果不是不真实的话。【参考方案5】:

3) WebApplication 项目可由 MSBuild 构建。网站不是(没有很多调整)。如果您将 TeamSystem 与自动构建一起使用,那么这就是您要走的路。

【讨论】:

【参考方案6】:

没有人真正提到过的最大区别(除了Annakata 提到的)是,通过将所有内容编译到单个DLL 中的模型,您可以完全控制应用程序生成的类。您知道它们在哪里,并且始终可以从应用程序的其他任何地方引用它们。

使用单页模型,您无法做到这一点。您必须通过在 AppCode 目录中创建“存根”类并在您的页面中继承这些类来解决它,但即使这样也不理想,并且会增加复杂性。

只有在您尝试开发一个复杂的动态站点时,您才会真正反对这些东西,您可以在运行时根据内容动态加载大量用户控件。然后,差异非常明显 - 因此我们的大部分开发在 ASP 1.1 上停滞不前,直到我们以后可以回到相同的模型。

小众

【讨论】:

【参考方案7】:

从两者的经验来看:“网站”用于没有适当的测试方法、没有 CI 服务器以及鼓励和促进定期对特定页面进行“修补程序”的文化。 “Web 应用程序”是事实上的标准,其中遵循适当的软件方法,并进行单元测试(如果不是完整的 TDD)和 CI 服务器,重点是在需要“修补程序”之前编写干净的代码和发现错误。

【讨论】:

【参考方案8】:

站点是 2003 年最初的 .NET 进行 Web 开发的方式。根据我的经验,它们非常存在问题,因为缺少项目定义,它们不能被重用,并且存在模块化编码问题,存在 TeamSystem 集成和命名空间问题。与域的一对一绑定和缺乏真正的发布抽象会导致维护问题。

古老的“经典” ASP 方式 !codebehind 是一个严重的问题,因为它再次损害了代码重用和测试,并且经常提到的允许热修复的好处 - 如果曾经调用过 - 实际上是一个巨大的信号,表明你有一个失败的开发过程。热修复的能力当然比不能热修复要好,但这是你永远不想调用的东西。

您可能会说网站模型的问题非常严重,以至于 MS 为我们提供了 Web 应用程序。就个人而言,我永远不会将它们用于演示代码之外的任何东西......实际上我什至不会这样做。

【讨论】:

Web 项目是 .Net 1.0 和 1.1 中的唯一选项。 VS 2005 最初完全摆脱了 Web 项目,直到大量投诉鼓励它们以服务包的形式回归。 VS 2008 继续为两者提供选择。 但是 1.1 中的 Web 项目相当于 2.0 中的网站 - 它更多的是进入 2.0(无 SP)的名称更改【参考方案9】:

    最初有一个 Web 应用程序项目(它的行为类似于当前的网站项目)。他们对其进行了更改以反映某些用户的要求。然而,人们希望恢复旧功能,因此他们重新引入了 Web 站点项目,该项目的行为类似于原始 Web 应用程序项目。

    我——以及我的工作场所——更喜欢网站项目

    我们喜欢网站的文件是文件系统中的文件(不需要手动添加)

    不知道

这是我找到的两篇关于两者的文章:

http://damieng.com/blog/2008/02/07/web-site-vs-web-application

http://www.dotnetspider.com/resources/1520-Difference-between-web-site-web-application.aspx

注意:网站部署项目解决了很多网站问题

更新:修正了第1点,Web应用程序首先出现

【讨论】:

其他方式——应用程序早于网站。 这是字面意思,但不是真的。 2k3 中的 WAP 大致相当于 2k5 中的 WSPnot 2k5 SP1.1 中的 WAP,这就是我们现在对术语的理解。 这是我听到的,已修复。【参考方案10】:

如果您的工作需要利用 oo 语言特性(类层次结构、命名空间),或者如果您需要在项目之间重用通用代码(数据访问、类库等),那么 Web 应用程序项目是唯一的选择。

网站项目(线索就在名称中)仅适用于非复杂的“宣传册软件”网站(页面由静态内容组成),而不是 Web 应用程序.

【讨论】:

【参考方案11】:

差别很小,我强烈推荐使用网站模型。

主要区别是对于一个网站来说,有些文件需要放在特定的目录下(代码文件需要放在'App_Code'目录下),除此之外,非常简单。

如果为部署而编译的代码对您很重要,并且您想要一个 DLL(与您为网站进行正常发布时创建的多个 DLL 相对),那么您将希望获得这个附加 -上:http://msdn.microsoft.com/en-us/asp.net/aa336619.aspx

【讨论】:

这不是“主要区别”,这里列出了许多更重要的区别:msdn.microsoft.com/en-us/library/…。就我个人而言,我认为将网站模型推荐给除了 CS 一年级学生或初出茅庐的业余 Web 开发人员之外的任何人都是鲁莽的。 怎么鲁莽?你唯一失去的就是在别处重用代码的能力;我从来没有开发过需要在另一个项目中使用代码的站点。如果我这样做了,那么该代码将在两个站点共享的自己的项目中。

以上是关于Visual Studio中“网站”和“项目”之间的区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 中网站和 Web 应用程序之间的区别?

visual studio (VS) 网站项目配置远程发布到IIS

如何在Visual Studio项目和单元测试项目之间建立联系?

Visual Studio中Rebuild和Clean + Build之间的区别

在 Visual Studio 中添加引用和将 Nuget 包添加到项目之间的区别

Visual Studio 无法在调试和发布之间进行选择