Tfs 是什么使msbuild等待生成同一项目的另一个节点?

Tfs 是什么使msbuild等待生成同一项目的另一个节点?,tfs,msbuild,Tfs,Msbuild,我已经做了两次并行测试来构建我的项目解决方案,看看会发生什么。结果表明,一个MSBuild节点在尝试生成我的解决方案之前等待另一个完成,然后说它是最新的。例: <!-- ProjectA.proj --> <Project> <ItemGroup> <Project Include="MyProject.sln" /> </ItemGroup> <Target Name="Build"&g

我已经做了两次并行测试来构建我的项目解决方案,看看会发生什么。结果表明,一个MSBuild节点在尝试生成我的解决方案之前等待另一个完成,然后说它是最新的。例:

<!-- ProjectA.proj -->
<Project>
    <ItemGroup>
        <Project Include="MyProject.sln" />
    </ItemGroup>

    <Target Name="Build">
        <MSBuild Projects="@(Project)" Targets="Build" BuildInParallel="true" />
    </Target>
</Project>

<!-- Test.proj -->
<Project>
    <ItemGroup>
        <Project Include="ProjectA.proj" />
        <Project Include="ProjectA.proj" />
    </ItemGroup>

    <Target Name="Build">
        <MSBuild Projects="@(Project)" Targets="Build" BuildInParallel="true" />
    </Target>
</Project>
<!-- When I check the build log it says 
    1> Project is building MyProject.sln (2) ...
    1> Project is building MyProject.sln (2:2) ...
    2> Building with tools...
    2> ...
    2:2> Building with tools...
    2> ...
    2> ...
    2> ...
    2> Done building
    2:2> Target ... skipped because it was previously built successfully
    2:2> Done building
-->

这是一种理想的行为,但当我试图依靠它使我的构建工作流成为构建服务器时,我的项目同时构建了两次,这给了我很多错误


我不理解两者之间的区别,也不知道如何找出问题。

作为“要构建的项目”,在构建定义中,您是像您给出的示例那样指定项目文件,还是直接指定解决方案文件?我现在理解了您的问题。我在构建定义中指定了一个比这个稍微复杂一点的项目,但是使用了相同的想法。