运行等同于命令行“构建页”为Visual Studio网站项目命令

运行等同于命令行“构建页”为Visual Studio网站项目命令

问题描述:

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

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

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

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

  • 大量CMS相关页面和用户控件我们做的不改变
  • 少量定制的,我们正在积极发展,都在网站内CMSWebParts /自定义目录“Web部件”用户控件

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

我已经发现,以减少预编译时间,小的变化到大的网站,最好的办法是使用ASP。网络编译工具(aspnet_compiler。exe)与就地编译。

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

aspnet_compiler.exe -v/-p C:\路径\为\ 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文件中的数据进行交叉引用,以确定发生了什么变化。

+0

那么为什么会有人使用-c选项? – sfarbota

我想这可能是帮助你需要完成的任务:

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

+0

你给了我一个ASP.Net命令行工具列表的链接......你能特别提出哪些可能有助于我试图实现的东西吗?谢谢。 –

+0

@Dan Malcolm:如何从命令提示符编译网站的解释如下:http://msdn.microsoft.com/en-us/library/ms229863.aspx有几个例子。 –

+0

这是我正在寻找的“Build Page”命令的等价物(“解决方案将像之前一样编译所有类库项目,然后编译/ app_code目录和Global.asax文件,验证网站中的所有页面,它只会验证您正在处理的当前页面以及页面引用的任何用户控件。“) –