在Visual Studio能够建立 Web 应用程序项目 或 网站项目。 经过选择 新建项目 或 打开项目 建立或打开一个 Web 应用程序项目在Visual Studio 文件 菜单。 经过选择 新建网站 或 打开网站 建立或打开一个网站项目在"文件"菜单。 html
每种项目类型各有优缺点,要选择能够知足须要的最佳项目类型,应了解各项目类型之间的差别。 建立项目以前,必须选择合适的项目类型,缘由是从一种项目类型转换到另外一种项目类型并不可行。 ios
![]() |
---|
在某些状况下,没法进行选择。 例如,所以,若是要建立ASP.NET MVC应用程序,您必须使用 Web 应用程序项目。 web |
本主题包含如下各节: 数据库
Web 应用程序项目的状况是优先选择包括: post
-
但愿可以使用Visual Studio调试器的 编辑并继续 功能。
-
须要对与 ASP.NET 页关联的类文件中的代码运行单元测试。
-
须要从独立类中引用与页和用户控件关联的类。
-
要在多个web项目之间的项目依赖项。
-
您但愿编译器为整个站点建立单个程序集。
-
您要控制为站点生成的程序集的名称和版本号。
-
须要使用 MSBuild 或 Team Build 编译项目。 例如,您可能但愿添加prebuild和postbuild步骤。
-
须要避免将源代码放置在生产服务器上。
-
须要使用 Visual Studio 中提供的自动化部署工具。
优先选择网站项目的状况包括:
-
能够在单个web项目中包含C#和Visual Basic代码。 (默认状况下, Web 应用程序编译根据项目文件的语言设置。 能够设置例外状况,但相对较难。)
-
须要在 Visual Studio 中打开生产站点和使用 FTP 对其进行实时更新。
-
不但愿必须显式编译项目才能部署项目。
-
若是预编译站点,您但愿编译器为站点建立多个程序集,能够是每一个页面或用户控件一个程序集,也能够是每一个文件夹一个或多个程序集。
-
您但愿可以经过仅将新版本复制到生产服务器,或经过在生产服务器上直接编辑文件来更新生产中的各个文件。
-
若是预编译站点,您但愿可以更新各 ASP.NET 网页(.aspx文件),而无需从新编译整个网站。
-
您但愿在生产服务器上保留源代码,以便用做附加备份副本。
下表总结了主要差别。
区域 |
Web 应用程序项目 |
网站项目 |
---|---|---|
项目文件结构 |
Visual Studio 项目文件(.csproj 或 .vbproj)存储有关项目的信息,如项目中包含的文件列表和项目间的任何引用。 |
不存在项目文件(.csproj 或 .vbproj)。 文件夹结构中的全部文件自动包含在站点中。 |
编译 |
|
|
命名空间 |
默认状况下,将显式命名空间添加到页面、控件和类中。 |
默认状况下,不将显式命名空间添加到页面、控件和类中,但您能够手动添加它们。 |
部署 |
|
|
Web 应用程序项目使用 Visual Studio 项目文件(.csproj 或 .vbproj)来跟踪有关项目的信息。 这使得能够指定哪些文件中或在生成过程当中,将该文件编译的项目中排除,和。
对于网站项目,文件夹结构中的全部文件自动视为该网站中。 若是要从生成中排除某些文件,必须从网站项目文件夹中移除文件或将其文件扩展名更改成不禁IIS编译和提供的扩展名。
使用项目文件的优势在 Web 应用程序项目以下:
-
易于暂时从站点移除文件,但仍确保不会失去对它们的跟踪,由于这些文件保留在文件夹结构中。 例如,若是页面没有为部署准备就绪,您能够暂时从生成中排除它,而无需从文件夹结构中将其删除。 您能够部署编译的程序集,而后再次将文件包括在项目中。 这在使用源代码管理储存库时尤其重要。
在网站项目中使用无项目文件的文件夹结构具备如下优势:
-
您没必要专门在 Visual Studio 中管理项目的结构。 例如,经过使用文件资源管理器中,能够将文件复制到项目中或从项目中删除它们。
对于 Web 应用程序项目,一般生成项目在Visual Studio中或经过使用不是生产IIS服务器的计算机上的ASP.NET批编译器。 全部代码都选件类文件和独立选件类隐藏文件在项目编译为单个程序集,在 Web 应用程序项目的Bin文件夹中放置。 (.aspx和.ascx文件进行动态编译以与网站项目相似的方式执行。)
对于网站项目,您没必要手动编译项目。 网站项目由ASP.NET动态一般内置(在开发计算机和生产IIS服务器上)。 您能够在批处理编译模式(一般为每一个文件夹生成一个程序集)和固定编译模式(一般为每一个页面或用户控件生成一个程序集)之间选择。
编译模型的优势 Web 应用程序项目中包括:
-
您可使用 MSBuild 来建立自定义批处理编译过程。
-
指定程序集特性(如名称和版本)很是简单。
-
事先编译可确保在生产服务器上编译站点期间用户无须等待。 (若是站点很是大,网站项目的动态编译可能须要花费大量时间。 动态编译在更新站点以后收到站点资源请求时发生,而且当编译所需资源时,触发编译的请求可能会被延迟。 若是延迟不可接受,则能够预编译站点。 但所以会失去动态编译的某些优势。)
-
您能够彻底控制项目文件夹结构中放置代码文件的位置,以及项目中的类互相引用的方式。 (动态编译要求在整个站点中使用的全部类的源代码必须位于 App_Code 文件夹中。 您不能从 App_Code 中的类引用页面或用户控件类。)
网站项目的编译模型具备如下优势:
-
您能够测试特定的页面,而无论其余页面的状态。 这是由于运行单个页面不须要成功编译整个站点,仅需编译该页面和该页面所依赖的任何组件,如 App_Code 文件夹或 Global.asax 文件中的代码。 (在 Web 应用程序项目,所以,若是任何位置存在编译错误该站点,则不能建立程序集不能测试所编译站点即便的部分。
-
在生产中更新网站很是容易。 能够更新生产服务器上的各个源代码文件,而无需以显式方式从新编译站点。 即便因为编译错误其余文件未准备就绪,也能够更新各个为部署准备就绪的文件。 还能够直接在 Visual Studio 中打开生产 IIS 服务器上的网站,并实时更新该网站。
-
在某些状况下,预编译为多个程序集具备性能优点。 一个典型示例是具备许多页面,并为这些页面编写了大量代码的站点。 其中大多数页面极少被请求,只有某些页面常常受到使用。 若是将这样的站点编译成多个程序集,生产服务器就能够仅加载当前请求所需的程序集。 若是未请求某个页面,则不会加载其对应的程序集。
![]() |
---|
在性能上没有差别网站项目与 Web 应用程序项目之间。 惟一明显的例外就是那些已经指出的例外,在实际使用时,它们仅适用于很是大的站点。 第一个请求绑定到该网站可能须要对站点进行编译,这可能会致使延迟。 此外,若是该网站在较短的内存中的IIS服务器运行,包括单个程序集的整个站点要比对多个程序集可能使用更多的内存是必需的。 |
若要部署 Web 应用程序项目,您复制已经过编译到IIS服务器的项目建立的程序集。 相反,部署网站项目,一般将项目源文件复制到IIS服务器。
部署策略的优势 Web 应用程序项目中包括:
-
能够避免将源代码部署到 IIS 服务器。 在某些状况下,例如在共享承载环境中,您可能会关注对 IIS 服务器上源代码进行的未经受权的访问。 (对于网站项目,则能够预编译在开发计算机和部署所生成的程序集避免此风险而不是源代码。 不过,在这种状况下,会失去轻松更新站点的某些好处。)
-
除将程序集或代码复制到服务器以外,部署一般还涉及其余任务。 例如,数据库脚本可能必须在生产中运行,Web.config 文件中的链接字符串可能须要针对生产服务器进行更改。 Visual Studio提供了一些如一键式发布将 Web 应用程序项目自动化其中的许多任务。 这些工具对于网站项目不可用。
网站项目部署策略的优势的包括:
-
若是作少许更改到网站,您没必要从新部署整个站点。 而是能够只将更改过的文件复制到生产 IIS 服务器。 另外,还可在生产服务器上直接编辑文件。 (由于 Web 应用程序项目的代码文件编译成单个程序集文件,则必须部署整个站点即便进行少许更改,所以,除非更改是针对.aspx或.ascx文件。)