当我在Visual Studio中启动新的ASP.NET项目时,我可以创建ASP.NET Web应用程序,也可以创建ASP.NET网站。

ASP.NET Web应用程序和ASP.NET网站之间的区别是什么?为什么我会选择一个而不是另一个?

答案是否因我使用的Visual Studio版本而异?


当前回答

这里Web支持应用程序是网站的一个示例。网站和Web应用程序都可以是动态/静态的,这取决于需求,这里有一个例子来理解网站和Web程序的工作。

其他回答

网站-不会创建解决方案文件。如果我们想创建网站,不需要visual studio。

Web应用程序-将创建解决方案文件。如果我们想创建web应用程序,应该需要visual studio。它将在bin文件夹中创建一个.dll文件。

是的,web应用程序比网站好得多,因为web应用程序给了我们自由:

在一个伞下有多个项目并建立项目之间的依赖关系。例如,对于PCS,我们可以在web中进行以下操作应用程序-Web门户通知控制器(用于发送电子邮件)业务层数据访问层异常管理器服务器实用程序WCF服务(所有平台通用)列表项目对类文件中的代码运行单元测试与ASP.NET页面关联参考以下类别与独立类中的页面和用户控件关联为整个站点创建单个部件的步骤控制为站点生成的程序集名称和版本号避免将源代码放在生产服务器上。(你可以避免将源代码部署到IIS服务器。在某些情况下,例如共享托管环境,您可能会担心未经授权访问IIS服务器上的源代码。(对于web站点项目,您可以通过在开发计算机并部署生成的程序集源代码的。然而,在这种情况下轻松更新网站的好处。)网站性能问题(对网站的第一请求可能需要编译网站,这可能导致延迟。如果网站运行在内存不足的IIS服务器,包括单个程序集使用的内存可能比多个组件。)

来自MCTS自定进度训练包考试70-515书:

利用web应用程序(项目),您可以创建MVC应用程序。Visual Studio将文件列表存储在项目文件(.csproj或.vbproj)中,而不是依赖于文件夹结构。不能混合使用Visual Basic和C#。不停止调试会话就无法编辑代码。您可以在多个web项目之间建立依赖关系。您必须在部署之前编译应用程序,这将阻止您在另一页无法编译时测试该页。您不必将源代码存储在服务器上。您可以控制程序集名称和版本。如果不重新编译,则无法在部署后编辑单个文件。

网站是您部署到ASP.NET Web服务器(如IIS)的内容。只是一堆文件和文件夹。网站中没有任何东西将您与Visual Studio联系在一起(没有项目文件)。网页(如.aspx、.ascx、.master)的代码生成和编译在运行时动态完成,对这些文件的更改由框架检测并自动重新编译。您可以将要在页面之间共享的代码放在特殊的App_code文件夹中,也可以对其进行预编译并将程序集放在Bin文件夹中。

Web应用程序是一个特殊的Visual Studio项目。与Web站点的主要区别在于,当您构建项目时,所有代码文件都被编译为一个单独的程序集,该程序集放在bin目录中。您不会将代码文件部署到web服务器。您可以像在类库中那样,将共享代码文件放在任何位置,而不是为共享代码文件设置一个特殊的文件夹。因为Web应用程序包含不打算部署的文件,例如项目和代码文件,所以Visual Studio中有一个Publish命令,用于将网站输出到指定位置。

App_Code与Bin

部署共享代码文件通常是一个坏主意,但这并不意味着您必须选择Web应用程序。您可以有一个网站,该网站引用了包含该网站所有代码的类库项目。Web应用程序只是一种方便的方式。

后面的代码

此主题特定于.aspx和.ascx文件。此主题在新的应用程序框架(如ASP.NET MVC和ASP.NET网页)中的相关性越来越小,这些框架不使用代码尾文件。

通过将所有代码文件编译为一个程序集,包括.aspx页和.ascx控件的代码库文件,在Web应用程序中,您必须为每一个微小的更改重新构建,并且无法进行实时更改。在开发过程中,这可能是一个真正的痛苦,因为您必须不断地重新构建以查看更改,而使用Web站点时,运行时会检测到更改,页面/控件会自动重新编译。

让运行时管理代码后端程序集对您来说工作量较小,因为您不必担心为页面/控件提供唯一的名称或将它们组织到不同的命名空间中。

我并不是说部署代码文件总是一个好主意(特别是在共享代码文件的情况下),但codebehind文件应该只包含执行特定于UI的任务、连接事件处理程序等的代码。您的应用程序应该分层,以便重要的代码始终位于Bin文件夹中。如果是这种情况,那么部署codebehind文件不应该被认为是有害的。

Web应用程序的另一个限制是您只能使用项目的语言。在网站中,您可以使用C#、VB等语言创建一些页面。无需特殊的Visual Studio支持。这就是构建提供程序可扩展性的优点。

此外,在Web应用程序中,您无法在页面/控件中进行错误检测,因为编译器只编译代码尾部类,而不编译标记代码(在MVC中,您可以使用MvcBuildViews选项修复此问题),而标记代码是在运行时编译的。

Visual Studio

因为Web应用程序是Visual Studio项目,所以您可以获得一些网站中不可用的功能。例如,您可以使用构建事件来执行各种任务,例如缩小和/或合并Javascript文件。

VisualStudio2010中引入的另一个不错的功能是Web.config转换。这在网站中也不可用。现在可以在VS 2013中使用网站。

构建Web应用程序比构建Web站点更快,特别是对于大型站点。这主要是因为Web应用程序不编译标记代码。在MVC中,如果您将MvcBuildViews设置为true,那么它将编译标记代码,并进行错误检测,这非常有用。缺点是,每次构建解决方案时,它都会构建一个完整的站点,这可能会很慢,效率也很低,特别是如果您没有编辑站点。我发现自己正在打开和关闭MvcBuildViews(这需要卸载项目)。另一方面,对于网站,您可以选择是否将网站作为解决方案的一部分来构建。如果您选择不这样做,那么构建解决方案的速度非常快,如果您进行了更改,您可以始终单击“网站”节点并选择“构建”。

在MVC Web应用程序项目中,您有用于常见任务的额外命令和对话框,如“添加视图”、“转到视图”、”添加控制器“等。这些在MVC Web站点中不可用。

如果使用IIS Express作为开发服务器,则可以在网站中添加虚拟目录。此选项在Web应用程序中不可用。

NuGet Package Restore在网站上不起作用,您必须手动安装软件包中列出的软件包。配置Package Restore现在可以用于启动NuGet 2.7的网站

“网站”的代码位于一个特殊的App_code目录中,并且在运行时被编译为多个DLL(程序集)。“web应用程序”被预编译为一个DLL。