当我在Visual Studio中启动新的ASP.NET项目时,我可以创建ASP.NET Web应用程序,也可以创建ASP.NET网站。
ASP.NET Web应用程序和ASP.NET网站之间的区别是什么?为什么我会选择一个而不是另一个?
答案是否因我使用的Visual Studio版本而异?
当我在Visual Studio中启动新的ASP.NET项目时,我可以创建ASP.NET Web应用程序,也可以创建ASP.NET网站。
ASP.NET Web应用程序和ASP.NET网站之间的区别是什么?为什么我会选择一个而不是另一个?
答案是否因我使用的Visual Studio版本而异?
当前回答
在Web应用程序项目中,Visual Studio需要用于页面和用户控件的其他.designer文件。网站项目不需要此开销。标记本身被解释为设计。
其他回答
来自MCTS自定进度训练包考试70-515书:
利用web应用程序(项目),您可以创建MVC应用程序。Visual Studio将文件列表存储在项目文件(.csproj或.vbproj)中,而不是依赖于文件夹结构。不能混合使用Visual Basic和C#。不停止调试会话就无法编辑代码。您可以在多个web项目之间建立依赖关系。您必须在部署之前编译应用程序,这将阻止您在另一页无法编译时测试该页。您不必将源代码存储在服务器上。您可以控制程序集名称和版本。如果不重新编译,则无法在部署后编辑单个文件。
我建议您观看ASP.NET网站上的“Web应用程序项目和Web部署项目”视频,该视频非常详细地解释了差异,这对我很有帮助。
顺便说一句,不要被标题所迷惑,视频的很大一部分解释了网站项目和web应用程序项目之间的区别,以及为什么Microsoft在Visual studio 2005中重新引入web应用程序(正如您可能已经知道的那样,它最初只提供网站项目,然后在SP1中添加了web应用程序)。这是一个很棒的视频,我强烈推荐给任何想了解差异的人。
绝对是web应用程序,单个DLL文件,易于维护。但网站更灵活;您可以随时编辑aspx文件。
网站:
网站项目是动态编译的。你最终会得到更多的DLL文件,这可能是一件痛苦的事。当一个目录中的页面或控件需要引用另一个目录的页面和控件时,这也会带来问题,因为其他目录可能尚未编译到代码中。另一个问题可能是出版。
如果Visual Studio没有被告知要经常重复使用相同的名称,它将为页面始终生成的DLL文件提供新名称。这可能导致具有包含相同类名的DLL文件的多个紧密副本,这将产生大量误差。网站项目是在VisualStudio2005中引入的,但事实证明它并不流行。
Web应用程序:
Web应用程序项目是作为外接程序创建的,现在作为一部分存在Visual Studio 2005的SP 1。主要区别在于Web应用程序项目设计为与Visual Studio 2003附带的Web项目类似。它将在构建时将应用程序编译为单个DLL文件时间若要更新项目,必须重新编译该项目,并且DLL文件发布以进行更改。
Web应用程序的另一个好特性从项目视图中排除文件要容易得多。在网站项目,您排除的每个文件都将重命名为文件名中的关键字。在Web应用程序项目中跟踪项目视图中要包含/排除的文件重新命名它们,使事情更加整洁。
参考
ASP.NET 2.0-网站与Web应用程序项目这篇文章也给出了为什么使用其中一个而不是另一个的原因。以下是摘录:
您需要将大型Visual Studio.NET 2003应用程序迁移到VS2005? 使用Web应用程序项目。您希望将任何目录作为Web项目打开和编辑,而不需要创建项目文件?使用网站项目您需要在编译期间添加预编译和后编译步骤吗?使用Web应用程序项目。您需要使用多个Web构建Web应用程序项目?使用Web应用程序项目。是否要为每个页面生成一个程序集?使用网站项目。您更喜欢动态编译和在不构建的情况下处理页面每个页面视图上的整个站点?使用Web现场项目。您更喜欢单页代码模型而不是代码隐藏模型?使用网站项目
Web应用程序项目与Web站点项目(MSDN)解释了Web站点和Web应用程序之间的差异。此外,它还讨论了在Visual Studio中进行的配置。
这听起来可能有点明显,但我认为这是一种误解,因为VisualStudio2005最初只是随网站一起提供的。如果你的项目涉及一个相当有限的网站,并且没有太多的逻辑或物理分离,那么这个网站就很好。然而,如果它确实是一个具有不同模块的web应用程序,许多用户可以在其中添加和更新数据,那么您最好使用该web应用程序。
网站模型的最大优点是app_code部分中的任何内容都是动态编译的。您可以在没有完全重新部署的情况下进行C#文件更新。然而,这是一个巨大的牺牲。很多事情都发生在难以控制的幕后。命名空间很难控制,app_code下的任何内容默认情况下都会使用特定的DLL,因为所有内容都是动态编译的。
web应用程序模型没有动态编译,但您可以控制我提到的内容。
如果您正在进行n层开发,我强烈推荐web应用程序模型。如果您正在做一个有限的网站或一个快速而肮脏的实现,那么网站模型可能有优势。
更详细的分析见:
Web应用程序项目和Web部署项目位于此处网站还是Web应用程序?