通过指定 targetDir 参数来编译应用程序以进行部署(编译到某个目标位置)。targetDir 可以是 Web 应用程序的最终位置;也可以进一步部署编译好的应用程序。
使用 -u 选项将以下面的方式编译应用程序:可以对编译好的应用程序中的某些文件做出更改,而无需重新编译该应用程序。Aspnet_compiler.exe 区分静态和动态文件类型之间的不同,并在创建生成的应用程序时,以不同的方式对它们进行处理。
静态文件类型是指那些没有关联的编译器或生成提供程序的文件类型,例如具有 .css、.gif、.htm、.html、.jpg、.js 等扩展名的文件。这些文件只是复制到目标位置,并且在保留的目录结构中保持它们的相对位置。
动态文件类型是指那些具有关联的编译器或生成提供程序的文件类型,包括具有 ASP.NET 特定文件扩展名(如 .asax、.ascx、.ashx、.aspx、.browser、.master 等等)的文件。ASP.NET 编译工具从这些文件生成程序集。如果省略 -u 选项,该工具还会创建具有文件扩展名 .COMPILED 的文件,这些文件将原始源文件映射到它们的程序集。为确保保留应用程序源的目录结构,该工具在目标应用程序的相应位置中生成占位符文件。
必须使用 -u 选项,以指示可以修改编译好的应用程序的内容。否则,将忽略后续修改或者导致运行时错误。
下表描述了在包括 -u 选项的情况下,ASP.NET 编译工具是如何处理不同的文件类型的。
|
文件类型
|
编译器操作
|
| .ascx、.aspx、.master | 这些文件被拆分为标记和源代码,其中包括代码隐藏文件和包含在 <script runat="server"> 元素中的任何代码。源代码编译到程序集中,其名称派生于哈希算法,且程序集放置在 Bin 目录中。任何内联代码(即包含在 <% 和 %> 括号之间的代码)包括在标记中,不进行编译。将创建与源文件同名的新文件来包含标记,新文件位于相应的输出目录中。 |
| .ashx、.asmx | 这些文件不进行编译,而是原样移动到输出目录中。如果希望编译处理程序代码,请将这些代码放入 App_Code 目录的源代码文件中。 |
| .cs、.vb、.jsl、.cpp (不包括先前列出的文件类型的代码隐藏文件) | 这些文件会进行编译,并作为资源包含在引用它们的程序集中。源文件不复制到输出目录中。如果不引用代码文件,则这些文件不会进行编译。 |
| 自定义文件类型 | 这些文件不进行编译。这些文件复制到相应的输出目录中。 |
| App_Code 子目录中的源代码文件 | 这些文件编译到程序集中,且放置在 Bin 目录中。 注意 |
|---|
| App_Code 目录中的静态文件类型不复制到输出目录中。 |
|
| App_GlobalResources 子目录中的 .resx 和 .resource 文件 | 这些文件编译到程序集中,且放置在 Bin 目录中。不会在主输出目录中创建 App_GlobalResources 子目录,且不会将源目录中的 .resx 或 .resources 文件复制到输出目录中。 注意 |
|---|
| App_GlobalResources 子目录中的资源文件先编译到程序集中,然后编译 App_Code 子目录中的代码。不支持在编译之后修改资源文件。 |
|
| App_LocalResources 子目录中的 .resx 和 .resource 文件 | 这些文件不进行编译,它们复制到相应的输出目录中。 |
| App_Themes 子目录中的 .skin 文件 | .skin 文件和静态主题文件不进行编译,它们复制到相应的输出目录中。 |
| .browser Web.config 静态文件类型 Bin 目录中已存在的程序集 | 这些文件原样复制到输出目录中。 |
下表描述了在省略 -u 选项的情况下,ASP.NET 编译工具是如何处理不同的文件类型的。
注意 |
|---|
| 不会提供阻止您修改已编译应用程序的源代码的警告。 |
|
文件类型
|
编译器操作
|
| .aspx、.asmx、.ashx、.master | 这些文件被拆分为标记和源代码,其中包括代码隐藏文件和包含在 <script runat="server"> 元素中的任何代码。源代码编译到程序集中,其名称派生于哈希算法。生成的程序集放置在 Bin 目录中。任何内联代码(即包含在 <% 和 %> 括号之间的代码)包括在标记中,不进行编译。编译器将创建新文件,以包括与源文件同名的标记。这些生成的文件放置在 Bin 目录中。编译器还会创建与源文件同名的文件,但新创建的文件具有扩展名 .COMPILED 且包含映射信息。.COMPILED 文件放置在与源文件的原始位置相对应的输出目录中。 |
| .ascx | 这些文件被拆分为标记和源代码。源代码编译到程序集中,且放置在 Bin 目录中,其名称派生于哈希算法。不生成标记文件。 |
| .cs、.vb、.jsl、.cpp (不包括先前列出的文件类型的代码隐藏文件) | 从 .ascx、.ashx 或 .aspx 文件生成的程序集所引用的源代码编译到程序集中,且放置在 Bin 目录中。不复制源文件。 |
| 自定义文件类型 | 这些文件像动态文件一样进行编译。编译器可以将映射文件放置在输出目录中,具体取决于它们所基于的文件类型。 |
| App_Code 子目录中的文件 | 该子目录中的源代码文件编译到程序集中,且放置在 Bin 目录中。 注意 |
|---|
| App_Code 目录中的静态文件类型不复制到输出目录中。 |
|
| App_GlobalResources 子目录中的文件 | 这些文件编译到程序集中,且放置在 Bin 目录中。不会在主输出目录下创建 App_GlobalResources 子目录。如果配置文件指定了 appliesTo="All",则 .resx 和 .resources 文件复制到输出目录中。如果这些文件被 BuildProvider 引用,则不会被复制。 |
| App_LocalResources 子目录中的 .resx 和 .resource 文件 | 这些文件编译到程序集中,具有唯一的名称,且放置在 Bin 目录中。不会将 .resx 或 .resource 文件复制到输出目录中。 |
| App_Themes 子目录中的 .skin 文件 | 主题文件编译到程序集中,且放置在 Bin 目录中。为 .skin 文件创建 stub(存根)文件,并将它们放置在相应的输出目录中。静态文件(如 .css)复制到输出目录中。 |
| .browser Web.config 静态文件类型 Bin 目录中已存在的程序集 | 这些文件原样复制到输出目录中。 |