Visual Studio中“网站”和“项目”之间的区别

时间:2009-02-26 13:19:26

标签: asp.net visual-studio-2008

  

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

我注意到,当您启动Visual Studio 2008并选择“新项目”时,您所获得的内容显然存在差异 - > “ASP.NET Web应用程序”代替“新网站” - > 'ASP.NET网站'。例如,如果选择“Project”,则可以编译为.dll,每个页面都会获得一个* .aspx.designer.cs代码隐藏文件。

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

2)你更喜欢哪一个?

3)为什么我会选择一个而不是另一个?

4)* .aspx.designer.cs文件的处理是什么?

11 个答案:

答案 0 :(得分:54)

他们有不同的目的。

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

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

答案 1 :(得分:28)

1)“网站”模型是在ASP.NET 2.0中引入的,“Web应用程序”模型是原始.net框架的项目类型。它们都有不同的用途(见下文)。

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

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

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

答案 2 :(得分:18)

我不会复制2的定义,因为那只是得到了答案。

那么为什么要使用一个呢?

Web站点允许您将其视为PHP或传统ASP站点,您可以在其中进行立即生效的内联更改。

赞成

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

缺点

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

Web应用程序可让您更好地对待桌面应用程序 - 在您的计算机上有一个可部署的部署。

赞成

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

  • 因为你在你的机器上编译它,所以在那一点上都会检查语法*

缺点

  • 只需从开发计算机复制文件夹,就可以进行部署。但是,使用“发布”命令极大地简化了编译和组合应将哪些文件复制到Web服务器的过程。

  • 需要在您的计算机上进行任何更改,编译并将全新版本发送到Web服务器*

*如果您在构建选项中启用此选项,则仅检查aspx / html文件的语法。除非将它们编译到项目中,否则也可以在服务器上编辑这些文件。

答案 3 :(得分:10)

简单的答案如下:

  1. 新网站 - 在请求页面时在服务器上编译的页面后面创建代码。
  2. 新建Web项目 - 将预编译的页面创建到一个或多个程序集中(甚至整个站点),并部署在服务器上。
  3. 场景#1 - 如果黑客获得了代码隐藏文件,则会暴露任何数据库密码。这些页面在请求时编译。您可以选择将所有内容预编译为大型程序集。如果没有,服务器上会有更多负载。

    场景#2 - 如果黑客获得你的程序集,它们将被混淆。混淆的组件更难破解。这些程序集是预编译的,因此减少了服务器上的负载。

    了解更多信息:

    Introduction to Web Application Projects

答案 4 :(得分:9)

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

答案 5 :(得分:5)

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

使用单页模型,您无法执行此操作。你必须通过在AppCode目录中创建“存根”类并在页面中继承它们来绕过它,但即便这样也不理想,并增加了复杂性。

如果您正在尝试开发一个错综复杂的动态网站,那么您只会真正提出这个问题,您可以根据内容在运行时动态加载大量用户控件。然后,差异非常明显 - 因此我们的开发大部分停滞在ASP 1.1上,直到我们稍后再回到相同的模型。

NICH

答案 6 :(得分:5)

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

答案 7 :(得分:4)

站点是2003年创建Web开发的.NET方式。根据我的经验,他们极其有问题,因为缺乏项目定义,他们无法重复使用,并且存在模块化编码问题,TeamSystem集成和命名空间存在问题。与域的一对一绑定和缺乏真正的发布抽象会产生维护问题。

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

您可能会说网站模型的问题非常严重,以至于MS给了我们网络应用程序。就个人而言,我绝不会将它们用于演示代码以外的任何内容......实际上我甚至都不会这样做。

答案 8 :(得分:3)

  1. 起初有一个Web应用程序项目(它的行为与当前的Web站点项目类似)。他们改变了它以反映一些用户的要求。然而,人们希望恢复旧功能,以便重新引入与原始Web应用程序项目类似的Web站点项目。

  2. 我 - 和我的工作场所 - 更喜欢网站项目

  3. 我们认为网站的文件是文件系统中的文件(无需手动添加)

  4. 不知道

  5. 以下是我发现的两篇文章:

    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

    注意:使用Web部署项目解决了许多网站问题

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

答案 9 :(得分:3)

如果您的工作需要利用oo语言功能(类层次结构,命名空间),或者您需要在项目(数据访问,类库等)中重用公共代码,那么Web应用程序项目是唯一的方法。< / p>

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

答案 10 :(得分:2)

差别很小,我强烈建议您使用网站模型。

主要区别在于网站,某些文件需要放在某些目录中(代码文件需要放在'App_Code'目录中),除此之外,它还很简单。

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