编译 Web 应用程序项目

更新:2007 年 11 月

Web 应用程序项目类型为 Microsoft Visual Studio 2005 中引入的网站项目类型提供了一种替代项目类型。Web 应用程序项目模型基于 Visual Studio .NET 2003 Web 项目模型。创建此模型有两个目的,一是简化将 Visual Studio .NET 2003 Web 项目转换为 Visual Studio 的更高版本的过程,二是减少所需的代码更改。项目中的代码文件已使用 Microsoft Build Engine (MSBuild) 预编译为单个程序集。ASP.NET 网页 (.aspx) 和用户控件 (.ascx) 由 ASP.NET 编译器在服务器上进行动态编译。

说明:

可以使用 Visual Studio 或 Visual Web Developer 速成版 创建 ASP.NET Web 应用程序项目。

编译模型

Web 应用程序项目的编译模型与 Visual Studio .NET 2003 编译模型类似。项目中的所有代码文件(独立文件、代码隐藏文件以及设计器类文件)已预编译为单个程序集。默认情况下,此程序集在 Bin 文件夹中生成并持久保存。由于此编译模型会创建单个程序集,因此可以指定程序集名称和版本等属性。此外,还可以指定输出程序集的位置。

网站项目使用项目文件夹定义,Web 应用程序项目则使用项目文件定义。项目文件包含项目中包括的各个文件、程序集引用以及其他项目元数据设置。包含在项目文件夹中但未在项目文件中定义的文件将不作为 Web 应用程序项目的一部分进行编译。对于通过 Visual Studio 或 Visual Web Developer 速成版 添加和更改的项目设置,将在为每个项目生成的项目文件 (.*proj) 中予以引用。

若要运行和调试页面,必须编译整个 Web 应用程序项目。由于 Visual Studio 和 Visual Web Developer 速成版 采用的增量生成模型只生成发生更改的文件,因此生成整个 Web 应用程序项目的速度会很快。

有关更多信息,请参见 Web 应用程序项目概述

预编译类文件

Web 应用程序项目使用 MSBuild 来预编译类文件。这些类文件将被编译到单个程序集中。默认情况下,它们保存在 Bin 文件夹中。您可以使用标准 MSBuild 扩展性规则来扩展和自定义编译过程。有关更多信息,请参见 MSBuild 概述

下表说明了被编译为单个程序集的 Web 应用程序项目类文件的类型。

类文件类型

说明

独立

可以创建并添加到 Bin 文件夹中的类文件。

代码隐藏

与内容文件直接相关的用户定义的代码。

设计器

自动生成的代码。您不应当修改 .designer 文件。

自定义编译选项

通过使用“项目设计器”窗口的“应用程序”属性页中的元素,可以指定输出程序集的名称、版本和其他详细信息。使用“项目设计器”窗口中的“生成”页可以指定项目的生成配置。例如,您可以指定错误的处理方式以及有关程序集输出的详细信息。此外,通过设置“生成事件”属性页的值,还可以在编译过程中添加预先生成和后期生成的步骤。有关属性页的更多信息,请参见用户界面元素 -> 项目

设置“生成操作”属性

默认情况下,当“生成操作”属性设置为“编译”时,MSBuild 只编译 Web 应用程序项目的类文件。但是,如果 Web 应用程序项目的类文件包括在 App_Code 文件夹中,将使用 ASP.NET 编译器编译这些文件。即使未将这些文件的生成操作显式设置为“编译”,也不例外。

说明:

App_Code 文件夹出现在 Visual Studio 2005 的网站项目中,但它通常不包括在 Web 应用程序项目中。有关 App_Code 文件夹的更多信息,请参见 ASP.NET 网站中的共享代码文件夹

动态编译

尽管项目中的代码文件已使用 MSBuild 预编译为单个程序集,但 Web 应用程序项目的 ASP.NET 网页 (.aspx) 和用户控件 (.ascx) 则是由 ASP.NET 编译器在服务器上进行动态编译。在 Web 应用程序项目中,网页和用户控件可以在其 @ Page 或 @ Control 指令中使用 CodeBehind 属性和 Inherits 属性。CodeBehind 属性引用要使用的代码隐藏文件。Inherits 属性则指向该代码隐藏文件中的命名空间和类。 

在 Web 应用程序项目中,可以在编译和部署网站中的 ASP.NET 网页后对它们进行有限的更改。例如,可以更改控件的排列、页的颜色、字体和其他外观元素。当网站第一次运行时,为了从标记创建输出,ASP.NET 将执行进一步的编译。

可以在代码隐藏文件中静态声明一个控件,但要使其成为受保护或公共控件。由于 .aspx 页继承自代码隐藏文件,因此它将使用该声明而不会声明一个新的控件。在以下情况中,将控件声明移入代码隐藏文件很有用:

  • 控件的类型必须从标准类型派生时。

  • 需要为控件设置其他范围,而不采用其默认范围时。范围是指可访问性级别,如 public、private、internal、protected 和 protected internal。

  • 需要向控件声明添加元数据属性时。

  • 需要为控件声明编写 XML 代码注释时。

有关如何添加控件的更多信息,请参见如何:以编程方式向 ASP.NET 网页添加控件

部署

由于所有类文件已编译为单个程序集,因此只有此程序集必须与 .aspx 和 .ascx 文件以及其他静态内容文件一起进行部署。在此模型中,除非浏览器请求 .aspx 文件,否则不会编译 .aspx 文件。

但是,您也可以编译 .aspx 文件并将它们包括在单个程序集中以进行部署。若要达到此目的,可以使用 Web Deployment Projects,这是 Visual Studio 的一个可下载外接程序。若要下载此外接程序,请参见位于 ASP.NET 开发中心网站上的 Visual Studio 2005 Web Deployment Projects。有关如何部署 Web 应用程序项目的更多信息,请参见如何:发布 Web 应用程序项目

请参见

概念

MSBuild 概述

Web 应用程序项目概述

ASP.NET 网站中的共享代码文件夹

ASP.NET 网页概述

参考

“项目设计器”->“生成事件”页 (C#)

“项目设计器”->“生成”页 (C#)

@ Page

其他资源

MSBuild 概念