关于asp.net:Visual Studio中“网站”和“项目”之间的差异

Difference between 'Web Site' and 'Project' in Visual Studio

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
ASP.NET: Web Site or Web Application?

我注意到,当您启动Visual Studio 2008并选择"新项目"->"ASP.NET Web应用程序"而不是"新网站"->"ASP.NET网站"时,您得到的内容明显不同。例如,如果选择"project",则可以编译为.dll,并且每个页面都会得到一个*.aspx.designer.cs codebehind文件。

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

2)您喜欢哪一种?

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

4)如何处理*.aspx.designer.cs文件?


他们有不同的目的。

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

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


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

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

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

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

  • 描述差异的msdn文章
  • 类似stackoverflow问题


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

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

网站允许您将其视为一个PHP或经典的ASP站点,您可以在其中进行立即生效的内联更改。

赞成的意见

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

欺骗

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

Web应用程序让您更像对待桌面应用程序——有一个可部署的程序编译在您的计算机上。

赞成的意见

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

  • 因为你在你的机器上编译它,所有的东西都会在那一点上得到语法检查。*

欺骗

  • 部署比从开发机器复制文件夹要复杂一些。但是,"publish"命令的使用大大简化了编译和将应复制到Web服务器的文件组合在一起的过程。

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

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


简单的答案如下:

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

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

    更多信息:

    Web应用程序项目简介


    3)webapplication项目可以通过msbuild构建。网站不是(没有很多调整)。如果您将TeamSystem与自动化构建结合使用,那么这就是我们要走的路。


    从两者的经验来看:"网站"用于没有测试方法、没有CI服务器以及鼓励并定期将"修补程序"推广到特定页面的文化。"Web应用程序"是一个事实上的标准,其中遵循了正确的软件方法,并且有单元测试(如果不是完整的TDD)和一个CI服务器,其重点是在需要"修补程序"之前编写干净的代码并查找错误。


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

    对于单页模型,您不能这样做。您必须通过在appcode目录中创建"stub"类并继承页面中的类来绕过它,但即使这样也不理想,并且增加了复杂性。

    只有当你试图开发一个复杂的动态站点时,你才会真正地重新使用这些东西,在这个站点中,你可以在运行时基于内容动态地加载很多用户控件。然后,这些差异就非常明显了——因此我们的许多开发都在ASP 1.1上停滞了,直到我们可以稍后返回到相同的模型。

    尼奇


    网站是2003年最早的.NET网站开发方式。根据我的经验,由于缺乏项目定义,网站无法重用,模块化编码存在问题,团队系统集成和名称空间也存在问题,因此存在极大的问题。域的一对一绑定以及缺乏真正的发布抽象在底层造成了维护问题。

    古老的"经典"ASP方式!代码隐藏是一个严重的问题,因为它再次损害了代码的重用和测试,并且允许热修复(如果曾经调用过)的经常被引用的好处实际上是一个巨大的信号,表明您的开发过程失败了。当然,热修复的能力比无法修复要好,但这是您永远不想调用的。

    你可能会说,网站模型的问题非常严重,微软给了我们Web应用程序。就我个人而言,除了演示代码,我永远不会使用它们……不,事实上,我甚至不会这么做。


    如果您的工作需要利用OO语言特性(类层次结构、名称空间),或者需要在项目之间重用公共代码(数据访问、类libs等),那么Web应用程序项目是唯一的方法。

    网站项目(线索在名称中)只适用于非复杂的"宣传册"网站(页面由静态内容组成),而不是Web应用程序。


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

  • 我——和我的工作场所——更喜欢网站项目

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

  • 不知道

  • 以下是我发现的两篇关于这两者的文章:

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

    http://www.dotnespider.com/resources/1520-difference-betwe-web-site-web-application.aspx

    注意:Web部署项目解决了许多与网站有关的问题。

    更新:修复了第1点,web应用首先出现在那里


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

    主要的区别是对于一个网站来说,有些文件需要放在特定的目录中(代码文件需要放在"app-code"目录中),此外,它是非常直接的。

    如果编译了用于部署的代码对您很重要,并且您需要一个DLL(而不是在为网站进行正常发布时创建的几个DLL),那么您将希望获得此加载项:http://msdn.microsoft.com/en-us/asp.net/aa336619.aspx