2

提示/技巧:使用 VS 2005 优化 ASP.NET 2.0 Web 项目构建性能中所述,Visual Studio 网站项目中可用的“构建页面”命令执行以下操作:

该解决方案将像以前一样编译所有类库项目,然后编译 /app_code 目录和 Global.asax 文件,然后不会重新验证网站内的所有页面,它只会验证您正在处理的当前页面,以及页面引用的任何用户控件

有没有办法从 msbuild 和/或命令行访问此功能?

我正在建立一个大型 Visual Studio 网站项目(基于 Kentico CMS)的自动构建,其中包括:

  • 大量与 CMS 相关的页面和我们不会更改的用户控件
  • 我们正在积极开发的少量自定义“Web 部件”用户控件,全部位于网站的 CMSWebParts/Custom 目录中

使用 aspnet_compiler 预编译整个站点最多需要 10 分钟,这对于提交构建来说太慢了。理想情况下,我想介绍一个仅预编译我们的自定义代码的步骤。请注意,我们实际上并未部署预编译的输出(不建议用于 Kentico 站点),此步骤仅用于验证 .ascx 文件中的代码。

4

2 回答 2

3

我发现减少对大型网站进行微小更改的预编译时间的最佳方法是使用带有就地编译的 ASP.Net 编译工具 (aspnet_compiler.exe)。

我们的构建脚本使用以下命令运行该工具:

aspnet_compiler.exe -v / -p C:\path\to\MyWebSite

此命令指定网站的物理路径,但不设置 targetDir 选项,这会导致应用程序被就地编译。

就地编译的好处是 aspnet_compiler 默认只编译自上次编译网站后发生更改的文件(您可以使用 -c 选项强制它重新编译所有内容)。例如,当我第一次对网站运行上述命令时,运行大约需要 10 分钟。如果我然后更改单个文件并再次运行它,只需要 30 秒左右。

您可能会对编译工具如何“知道”哪些文件已更改感到好奇。就地编译不会修改正在编译的应用程序,也就是说,您不会在 Web 应用程序的 bin 文件夹中得到 App_Web_xdqqvn5q.dll 和 default.aspx.cdcab7d2.compiled 等文件。输出实际上是在“Temporary ASP.NET Files”文件夹中生成的。当您指定物理路径(而不是 IIS 元数据库)时,将使用配置文件中的文件夹,例如 C:\Users\your.name\AppData\Local\Temp\Temporary ASP.NET Files。您的 Web 应用程序源代码与存储在 ASP.NET 临时文件中的数据进行交叉引用,以确定发生了什么变化。

于 2011-08-25T12:13:03.610 回答
0

我认为这可能对您需要完成的工作有所帮助:

http://msdn.microsoft.com/en-us/library/dd293881.aspx

根据我阅读的内容,您可以从 Visual Studio 命令提示符或 Windows 命令提示符运行构建。

更新:

我在互联网上找不到与只构建一页有关的任何内容,但是使用不带-c 参数的 aspnet_compiler 应该会加快编译过程,因为它只会重新编译已更改的内容。如果自上次构建以来唯一改变的是一个 .aspx 页面的内容,那么运行编译器应该类似于构建页面。

-C

指定应完全重建要编译的应用程序。已经编译的组件会再次编译。如果省略此选项,则该工具仅构建自上次执行编译以来已修改的应用程序部分。

本页解释了 aspnet_compiler 的用法:

http://msdn.microsoft.com/en-us/library/ms229863.aspx

于 2011-08-24T10:52:42.260 回答