当我在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应用程序=当应用程序由程序员创建且图形设计师仅编辑一页或两页/图像时使用。
网站可以使用任何HTML工具进行工作,而不必使用开发人员工作室,因为项目文件不需要更新等。当团队主要使用开发人员studio并且代码内容较高时,Web应用程序是最佳的。
(某些编码错误在编译时在Web应用程序中发现,直到运行时才在Web站点中发现。)
警告:我多年前就写过这个答案,之后就再也没有使用Asp.net了。我想事情已经开始了。
其他回答
“网站”的代码位于一个特殊的App_code目录中,并且在运行时被编译为多个DLL(程序集)。“web应用程序”被预编译为一个DLL。
网站是您部署到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的网站
其中一个关键区别是网站动态编译和动态创建程序集。Web应用程序编译成一个大型程序集。
Visual Studio 2008中消除了两者之间的区别。
网站-不会创建解决方案文件。如果我们想创建网站,不需要visual studio。
Web应用程序-将创建解决方案文件。如果我们想创建web应用程序,应该需要visual studio。它将在bin文件夹中创建一个.dll文件。
总结以上一些答案:
灵活性,您可以对网页进行实时更改吗?
网站:可能。赞成:短期利益。缺点:项目混乱的长期风险。
Web应用程序:不可能。编辑页面,将更改存档到源代码管理,然后构建和部署整个站点。专业:保持高质量的项目。
发展问题
网站:没有.csproj文件的简单项目结构。两个.aspx页面可以具有相同的类名,而不会发生冲突。随机项目目录名导致生成错误,如为什么.net框架与自己生成的文件冲突,以及为什么.net框架与其自己生成的文档冲突。专业人士:简单(简单化)。缺点:不稳定。
Web应用程序:项目结构类似于WebForms项目,具有.csproj文件。asp页面的类名必须是唯一的。专业:简单(智能)。缺点:没有,因为网络应用程序仍然很简单。