当我在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.NET Web相同的Web项目语义项目。具有项目文件(基于项目文件的结构)。构建模型-项目中的所有代码都编译为单个装配支持IIS和内置ASP.NET开发服务器支持Visual Studio 2005的所有功能(重构,泛型等)和ASP.NET(主页、成员资格和登录名,网站导航、主题等)。使用FrontPage服务器扩展(FPSE)不再是要求。
网站项目模型
没有项目文件(基于文件系统)。新的编译模型。动态编译和处理页面,无需构建整个站点在每个页面视图上。支持IIS和内置ASP.NET Development Server。每个页面都有自己的程序集。不同的代码模型。
其他回答
网站:
网站项目是动态编译的。你最终会得到更多的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中进行的配置。
这里Web支持应用程序是网站的一个示例。网站和Web应用程序都可以是动态/静态的,这取决于需求,这里有一个例子来理解网站和Web程序的工作。
这始终取决于客户的要求。ASP.NET仅包含用户需要的灵活功能,以确保应用程序的安全性和易于维护。
您可以将Web应用程序视为在ASP.NET框架内运行的二进制文件。网站是一个静态网页,您可以查看并轻松部署源代码。
但这两种ASP.NET技术的优点和缺点都是好的。
这听起来可能有点明显,但我认为这是一种误解,因为VisualStudio2005最初只是随网站一起提供的。如果你的项目涉及一个相当有限的网站,并且没有太多的逻辑或物理分离,那么这个网站就很好。然而,如果它确实是一个具有不同模块的web应用程序,许多用户可以在其中添加和更新数据,那么您最好使用该web应用程序。
网站模型的最大优点是app_code部分中的任何内容都是动态编译的。您可以在没有完全重新部署的情况下进行C#文件更新。然而,这是一个巨大的牺牲。很多事情都发生在难以控制的幕后。命名空间很难控制,app_code下的任何内容默认情况下都会使用特定的DLL,因为所有内容都是动态编译的。
web应用程序模型没有动态编译,但您可以控制我提到的内容。
如果您正在进行n层开发,我强烈推荐web应用程序模型。如果您正在做一个有限的网站或一个快速而肮脏的实现,那么网站模型可能有优势。
更详细的分析见:
Web应用程序项目和Web部署项目位于此处网站还是Web应用程序?
MSDN中有一篇文章描述了这些差异:
比较网站项目和Web应用程序项目
BTW:关于这个话题有一些类似的问题,例如:
Visual Studio中的网站与ASP.Net Web应用程序之比较注意:已删除,不再在SO中ASP.NET中的网站或Web应用程序