MSBuildをひどく誤解していない限り、タスクは「ターゲット」ノード内に表示されるドキュメントの順序で実行されます。
2つのタスク(xcopyタスクなど)を並行して実行できるように指定できるようにしたいと思います。 「並列」タスクか何かがあると思っていました...?
すでに述べたように、タスクレベルまたはターゲットレベルでさえ並列化することはできません。 MSBuildは、プロジェクト(つまり、MSBuildプロジェクトファイル)のみを並行してビルドします。したがって、複数のプロジェクトを指定して MSBuildタスク を使用する必要があり、BuildInParallel属性をtrueに設定する必要があります。また、コマンドラインでビルドが呼び出されたときに、/ mスイッチが送信されることを確認してください。
イブラヒム橋見は言った
MSBuild拡張パックの新しい並列タスクを試してください http://mikefourie.wordpress.com/2012/02/29/executing-msbuild-targets-in-parallel-part-1
これは、msbuildターゲットを並行して実行する方法の例です。考え方は同じです...このmsbuildファイル自体をビルドするプロジェクトとして提示します。私は自分の質問からそれをコピーしました: C#を介してmsbuildタスクで定義されたアイテムを評価します
<Project xmlns="http://schemas.Microsoft.com/developer/msbuild/2003" ToolsVersion="4.0" DefaultTargets="Build">
<Target Name="Build" DependsOnTargets="PrepareEnvironmentForBuild;MapDrives">
<Exec Command="$(MSBuildBinPath)\msbuild /nologo /clp:Verbosity=quiet $(MSBuildThisFileFullPath) /t:TargetWithConfidentialSteps"/>
<ItemGroup>
<StepsToRunInParallel Include="$(MSBuildThisFileFullPath)">
<Properties>TargetToInvoke=ParallelTarget1</Properties>
</StepsToRunInParallel>
<StepsToRunInParallel Include="$(MSBuildThisFileFullPath)">
<Properties>TargetToInvoke=ParallelTarget2</Properties>
</StepsToRunInParallel>
</ItemGroup>
<MSBuild Projects="@(StepsToRunInParallel)" BuildInParallel="true" StopOnFirstFailure="true" Targets="InvokeInParallelWithinThisProject"/>
</Target>
<Target Name="InvokeInParallelWithinThisProject">
<MSBuild Projects="$(MSBuildThisFileFullPath)" Targets="$(TargetToInvoke)" StopOnFirstFailure="true"/>
</Target>
<Target Name="ParallelTarget1">
<Message Text="Hello from ParallelTarget1"/>
</Target>
<Target Name="ParallelTarget2">
<Message Text="Hello from ParallelTarget2"/>
</Target>
<Target Name="PrepareEnvironmentForBuild">
<Message Text="Hello from PrepareEnvironmentForBuild"/>
</Target>
<Target Name="MapDrives">
<Message Text="Hello from MapDrives"/>
</Target>
<Target Name="TargetWithConfidentialSteps">
<Message Text="Hush! Verbosity on the wrapper does not affect the Exec call." Importance="High"/>
</Target>
外部ツールを使用する以外にこれを行う方法はないと思います。これは、MSが当面無視することを選択した潜在的な依存関係の問題を引き起こし、外部のツールベンダーが問題に取り組むことを可能にするためだと思います(そしてそれにかなりのお金を請求します)。