2010-02-10 68 views
4

我们有许多编译.NET代码的Nant脚本。这些版本需要运行5-10分钟,我想找到一种方法来加速它们。如何加快Nant构建?

我们的南特脚本看起来像

<target name="compile.XYZ" description="Compiles the source code"> 
    <msbuild project="${src.dir}\XYZ.sln" verbosity="${build.verbosity}"> 
     <property name="Configuration" value="${build.config}" /> 
     <property name="OutputPath" value="${build.fullpath}/${prefix.xyz}" /> 
     <property name="ReferencePath" value="${assembly.dir}" /> 
    </msbuild> 
</target> 

他们都非常相似这一点。我确实对nant进行了调查,但它看起来有些过时,所以我有点犹豫使用它,虽然这可能非常方便,因为我们在构建中有多个目标。

任何帮助你可以提供改善这些版本的性能将不胜感激!

谢谢:)

回答

3

您的解决方案中的项目越多,构建时间就越长。 与解决方案的数量相同。

没有什么可以做的。顺便说一句,这不是南特,这是缓慢的,它的msbuild。

可以尝试一些斯科特Hanselsman建议:

http://www.hanselman.com/blog/FasterBuildsWithMSBuildUsingParallelBuildsAndMulticoreCPUs.aspx

实际上,这需要你沿着“BuildInParallel =”真“”的任务,虽然有一定的注意事项通过。

这将允许同一解决方案内的项目并行构建,但我没有看到并行构建多个解决方案的方法。

为此,您可以在中创建一个元解决方案(只有手动维护,或者在构建完成之前自动生成),您可以在其中添加所有不同的项目。

1

假设你有足够的RAM,我就买一套RAM磁盘的应用程序(我用这个one了良好的效果)。

在此驱动器上安装源代码,安装Nant。在那里安装第三方库和其他支持基础设施。它应该产生至少33%至50%的性能跳跃。

另外,获取一个SSD并在其上安装OS和.NET框架。一起你应该能够进一步削减它。

+0

你好。感谢您的回应。如果可能,我希望在不购买硬件的情况下解决此问题。如果有办法将任务分解为异步运行,那将是理想的...... :) – Hewie 2010-02-10 04:34:23

+0

我没有意识到你想分解任务。看到我的其他答案。 – AngryHacker 2010-02-10 04:43:26

4

一件事看出来的任何编译系统,以确保其了解所有的依赖。在你的情况下,你正在混合构建系统,这很好,但你必须确保Nant和MSBuild都知道你的依赖关系。如果您有两个相互依赖的解决方案,将这些相关项目移至自己的解决方案可能会有所帮助,以确保在构建周期内仅构建一次。

确保您利用增量编译。如果您不相信发布候选版本的增量构建版本,则对于版本与测试版本和开发版本使用单独的构建目标。另外请确保您正在使用正在运行的构建类型的适当编译器设置。

可以并行构建任何没有编译时间依赖性的解决方案。尽管MSBuild(3.5和更高版本)natively支持在同一台机器上进行并行构建,但是Nant不支持(它的Java同级,Ant)。补偿这一点的一种方法是创建一个仅由构建使用的主解决方案文件。这将允许MSBuild并行独立项目。这个稍微过时的MSDN article列出了不同解决方案/项目组织技术的优点和缺点。您可以通过在多台机器上设置构建服务器场和构建独立解决方案来将其提升到新的水平。大多数持续集成服务器都支持这一点

要考虑的另一件事是您的项目是否遵循多个开发项目中的DRY原则。如果两个不相关的项目具有类似用途的类,则它们可以合并为一个类并移至共享库。通过消除重复代码,您不仅可以降低维护成本,还可以同时优化构建过程。如果您的开发人员专注于某些项目,那么在无关项目中查找重复项是非常耗时的。