从命令行运行等效于Visual Studio网站项目的“构建页面”命令

时间:2011-08-24 10:35:21

标签: asp.net visual-studio msbuild aspnet-compiler kentico

Tip/Trick: Optimizing ASP.NET 2.0 Web Project Build Performance with VS 2005中所述,Visual Studio网站项目中提供的“构建页面”命令执行以下操作:

  

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

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

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

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

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

2 个答案:

答案 0 :(得分: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应用程序源代码与存储在Temporary ASP.NET Files中的数据交叉引用,以计算出已更改的内容。

答案 1 :(得分:0)

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

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

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

<强>更新

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

  

-c

     

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

aspnet_compiler用法在此页面上进行了解释:

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