使用msbuild为多个平台重建多个项目的速度最快

时间:2014-06-12 04:37:02

标签: msbuild

我有一个包含很多项目的解决方案文件,我希望使用持续集成系统构建其中一个子集(Jenkins,正好相反)。目前我调用devenv并指定每个项目/平台,这相当于对devenv的28次调用。如果只做了很小的改动,最终会花费相当多的时间来完成任何事情(很多项目根本不会改变)。

在linux上构建相同的东西,我使用ninja,如果没有任何改变,那么构建过程或多或少是即时的。

我想要的是能够启动msbuild,因为这似乎是工作的工具,并提供了要构建的项目/平台列表并让它完成它的工作。当然,我希望所有的项目并行构建也能实现。

我已经浏览了相当多的文档,但到目前为止,msbuild坚持不懈地坚持按顺序构建所有项目。

2 个答案:

答案 0 :(得分:0)

在解决方案文件中添加项目并运行如下命令:

msbuild.exe SolutionFile.sln /t:Build/p:Configuration=Release;Platform=Win32

您可以添加/ m选项以parralel

生成多个项目

答案 1 :(得分:0)

编辑:使用MsBuild.exe / m并行构建。

要获得额外的功劳,请同时并行构建所有配置>:)

1)确保所有依赖于彼此的项目都有参考。

2)将所有这些包含在一个组中,并使用Configuration Manager删除解决方案中不支持的平台和配置组合。

3)戴上疯狂的科学家帽,并创建一个新的MsBuild项目,用于构建您的解决方案。

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0" >
    <PropertyGroup>
        <SrcRoot Condition="'$(SrcRoot)'==''">$([MSBuild]::GetDirectoryNameOfFileAbove( $(MSBuildProjectDirectory) , Project.props ))</SrcRoot>
    </PropertyGroup>
    <Import Project="$(SrcRoot)\Project.props" />
    <ItemGroup>
        <SolutionConfiguration Include="$(SrcRoot)\MySolution.sln">
            <Properties>Configuration=Release;Platform=x86</Properties>
        </SolutionConfiguration>
        <SolutionConfiguration Include="$(SrcRoot)\MySolution.sln">
            <Properties>Configuration=Debug;Platform=x86</Properties>
        </SolutionConfiguration>
        <SolutionConfiguration Include="$(SrcRoot)\MySolution.sln">
            <Properties>Configuration=Debug;Platform=x64</Properties>
        </SolutionConfiguration>
        <SolutionConfiguration Include="$(SrcRoot)\MySolution.sln">
            <Properties>Configuration=Debug;Platform=x64</Properties>
        </SolutionConfiguration>
    </ItemGroup>

    <Target Name="Build">
        <MsBuild BuildInParallel="true" ContinueOnError="true" Projects="@(SolutionConfiguration)" />
    </Target>
</Project>

该项目期望分支根目录中的“project.props”建立$(SrcRoot)文件夹。然后它将导入该项目。如果这不起作用,只需删除&lt; Import /&gt;并将其更改为解决方案的名称或根目录中的任何其他文件。 然后,它创建一个由MsBuild任务并行批处理的项目组。因此,不是按顺序构建不同的配置,而是一次性构建它们。

现在将它与可以检测文件访问和写入的内容结合起来,您将能够检测竞争条件或来自一个配置组合的位可以覆盖另一个组件的区域。