Build 如何加速Nant构建?

Build 如何加速Nant构建?,build,performance,nant,compilation,Build,Performance,Nant,Compilation,我们有许多Nant脚本来编译.NET代码。这些构建需要5-10分钟才能运行,我想找到一种加速它们的方法 我们的Nant脚本看起来像 <target name="compile.XYZ" description="Compiles the source code"> <msbuild project="${src.dir}\XYZ.sln" verbosity="${build.verbosity}"> <property name="Co

我们有许多Nant脚本来编译.NET代码。这些构建需要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进行了调查,但它看起来有点过时,所以我有点犹豫是否使用它,尽管这可能非常方便,因为我们的构建中确实有多个目标

如果您能提供任何帮助来提高这些构建的性能,我们将不胜感激


谢谢:)

如果你有足够的RAM,我会买一个RAM磁盘应用程序(我使用这个程序效果很好)

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


此外,获取SSD并在其上安装OS和.NET framework。总之,您应该能够进一步降低成本。

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

对此你真的无能为力。 顺便说一句,这里慢的不是Nant,而是它的msbuild

您可以尝试一下Scott Hanselsman的一些建议:

实际上,这要求您将“BuildInParallel=“true”传递给任务,尽管存在某些警告

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


为此,您可以制作一个元解决方案(仅手工维护,或在生成之前在nant中自动生成),在其中添加所有不同的项目。

另一种方法是根据对代码的理解将MSBuild拆分任务。 可以使用/m:x参数指定可以使用多少CPU。或者只是/m来使用全部

一些供您阅读的链接:


任何构建系统都需要注意的一件事是确保其了解所有依赖关系。在您的例子中,您混合了构建系统,这很好,但是您必须确保Nant和MSBuild都知道您的依赖关系。如果您有两个相互依赖的解决方案,那么将这些相互依赖的项目移动到它们自己的解决方案中可能是有益的,以确保它们在构建周期中只构建一次

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

任何互不具有编译时依赖关系的解决方案都可以并行构建。虽然MSBuild(3.5及更高版本)支持在同一台机器上进行并行构建,但Nant不支持(但它的Java同级Ant支持)。补偿这种情况的一种方法是创建一个仅由构建使用的主解决方案文件。这将允许MSBuild并行化独立项目。这份稍微过时的MSDN列出了不同解决方案/项目组织技术的优缺点。您可以通过设置构建场并在多台机器上构建独立的解决方案,将此提升到下一个级别。大多数持续集成服务器都支持这一点


另一个要考虑的问题是,您的项目是否遵循多个开发项目的“干燥原则”。如果两个不相关的项目具有具有类似用途的类,则可以将它们合并为一个类并移动到共享库中。通过消除代码重复,您不仅降低了维护成本,同时还优化了构建过程。如果您的开发人员专门从事某些项目,则在不相关的项目中查找重复会非常耗时。

您好。谢谢你的回复。如果可能的话,我希望在不购买硬件的情况下解决这个问题。如果有一种方法可以将任务拆分为异步运行,那将是理想的…:)我没有意识到你想要分割任务。看看我的另一个答案。