ASP.NET Web 应用程序项目预编译概述
默认情况下,Web 应用程序项目中的代码文件已使用 Microsoft Build Engine (MSBuild) 预编译为单个程序集。 ASP.NET 网页 (.aspx)、用户控件 (.ascx) 和 MVC Razor 视图(.cshtml 和 .vbhtml)由 ASP.NET 编译器在服务器上进行动态编译。 也可选择预编译网页、用户控件和 Razor 视图。
备注
本主题仅适用于 Web 应用程序项目。有关 Web 应用程序项目与网站项目之间的差异的信息,请参见 Web 应用程序项目与 Visual Studio 中的网站项目。有关如何预编译网站项目的信息,请参见 ASP.NET Web Site Project Precompilation Overview。
编译模型
项目中的所有代码文件(独立文件、代码隐藏文件以及设计器类文件)已预编译为单个程序集。 默认情况下,此程序集在 Bin 文件夹中生成并持久保存。 由于此编译模型会创建单个程序集,因此可以指定程序集名称和版本等特性。 此外,还可以指定输出程序集的位置。 若要更改输出程序集的位置,请在**“解决方案资源管理器”中,右击项目名称,单击“属性”,然后单击“生成”**选项卡。 **“生成”选项卡上是一个名为“输出路径”**的字段,可以在其中指定输出程序集的路径。
网站项目使用项目文件夹定义,Web 应用程序项目则使用项目文件定义。 项目文件引用项目中包括的文件并包括程序集引用及其他项目元数据设置。 包含在项目文件夹中但未在项目文件中定义的文件将不作为 Web 应用程序项目的一部分进行编译。 对于通过 Visual Studio 或 Visual Web Developer Express 添加和更改的项目设置,将在为每个项目生成的项目文件 (.*proj) 中予以引用。
若要运行和调试页面,必须编译整个 Web 应用程序项目。 不过,由于 Visual Studio 和 Visual Web Developer Express采用的增量生成模型只生成发生更改的文件,因此生成整个 Web 应用程序项目的速度会很快。
有关更多信息,请参见 Web Application Projects Overview。
编译类文件
Web 应用程序项目使用 MSBuild 来编译类文件。 这些类文件将被编译到单个程序集中。 默认情况下,它们保存在 Bin 文件夹中。 您可以使用标准 MSBuild 扩展性规则来扩展和自定义编译过程。 有关更多信息,请参见 MSBuild。
下表说明了被编译为单个程序集的 Web 应用程序项目类文件的类型。
类文件类型 |
说明 |
---|---|
独立 |
可以创建并添加到 Bin 文件夹中的类文件。 |
代码隐藏 |
定义 ASP.NET 网页中的显示及其他行为的用户定义的代码。 |
设计器 |
自动生成的代码。 您不应当修改 .designer 文件。 |
自定义编译选项
通过使用**“项目设计器”窗口的“应用程序”属性页中的元素,可以指定输出程序集的名称、版本和其他详细信息。 使用“项目设计器”窗口中的“生成”页可以指定项目的生成配置。 例如,您可以指定错误的处理方式以及有关程序集输出的详细信息。 此外,通过设置“生成事件”**属性页的值,还可以在编译过程中添加预先生成和后期生成的步骤。 有关属性页的更多信息,请参见项目设计器用户界面参考。
设置“生成操作”属性
默认情况下,当**“生成操作”属性设置为“编译”时,MSBuild 只编译 Web 应用程序项目的类文件。 但是,如果 Web 应用程序项目的类文件包括在 App_Code 文件夹中,将使用 ASP.NET 编译这些类文件。 即使未将这些文件的生成操作显式设置为“编译”**,也不例外。
备注
App_Code 文件夹存在于网站项目中,此文件夹通常不包括在 Web 应用程序项目中。有关 App_Code 文件夹的更多信息,请参见 Shared Code Folders in ASP.NET Web Sites。
动态编译
尽管项目中的代码文件已使用 MSBuild 预编译为单个程序集,但 Web 应用程序项目的 ASP.NET 网页 (.aspx)、用户控件 (.ascx) 和 MVC Razor 视图(.cshtml 和 .vbhtml)则是由 ASP.NET 编译器在服务器上进行动态编译。 这意味着可以在编译和部署站点中的 ASP.NET 网页、用户控件和 Razor 视图后对它们进行有限的更改。 例如,可以更改控件的排列、页的颜色、字体和其他外观元素。 当站点在您进行了此类更改后收到其第一个页请求时,ASP.NET 会重新编译更改的文件。
可以在代码隐藏文件中定义控件,但要使其成为受保护或公共控件。 因为 .aspx 页继承自代码隐藏文件,所以该页将使用该控件。 在以下情况中,将控件定义移入代码隐藏文件很有用:
控件的类型必须从内置 ASP.NET 类型派生时。
需要为控件设置其他范围,而不采用其默认范围时。 范围是指可访问性级别,如 public、private、internal、protected 和 protected internal。
需要向控件声明添加元数据特性时。
需要为控件声明编写 XML 代码注释时。
有关如何添加控件的更多信息,请参见How to: Add Controls to an ASP.NET Web Page Programmatically。
部署
默认情况下,所有类文件已编译为单个程序集,表示只有该程序集必须与 .aspx、.ascx、.cshtml 和 .cshtml 文件以及静态内容文件一起进行部署。 在此方案中,不会将 .aspx、.ascx、.cshtml 和 .vbhtml 文件中的标记编译为可运行的代码,直到浏览器请求该页。
但是,您可以指定不同编译和合并选项。 例如,可以预编译 .aspx 文件,或可以指定应创建多个而不只是一个程序集。 有关 Web 应用程序项目编译和合并选项的更多信息及指定这些选项的方法,请参见下列资源:
有关如何部署 Web 应用程序项目的信息,请参见用于 Visual Studio 和 ASP.NET 的 Web 部署内容映射。
请参见
概念
用于 Visual Studio 和 ASP.NET 的 Web 部署内容映射
Web 应用程序项目与 Visual Studio 中的网站项目