1

MSBuild プロジェクトがあり、その中に BuildInParallel = "true" を設定した複数のプロジェクトを呼び出すタスクがあります。

例:

  <Message Text="MSBuild project list = @(ProjList)" />
  <!-- Compile in parallel -->
  <MSBuild Projects="@(ProjList)" 
           Targets="Build" 
           Properties="Configuration=$(Configuration)" 
           BuildInParallel="true" /> 

これらのサブプロジェクトは実際にコマンド ライン ツールを呼び出して、実際の「ビルド」を行います。これを compile.exe と呼びます。ビルド プロセスの大まかなプロファイリング (taskmgr.exe に感謝) を実行すると、次の結果が得られます。

/m 設定に基づいて-もちろん、予想されるMSBuild.exeプロセスの正確な数が開始されたことがわかります-利用可能な同時ビルドプロセスの合計。

しかし、私が期待しているのは、compile.exe のプロセスの数です。基本的に、MSBuild の各プロセスは順番を変えて compile.exe を呼び出します。私が見ているのは、いくつかの compile.exe が開始され、その後、1 つの compile.exe がまだ残っているのを確認するまでゆっくりと終了することです。各 compile.exe のタスクには異なる時間がかかるため、そのうちの 1 つに他のタスクよりも多くの時間がかかることが予想されます。

ただし、最初の「バッチ」が終了するまで、他の compile.exe は生成されません。言い換えると、/m:4 がある場合、すべてが終了するまで 4 つの compile.exe が表示され、その後別の 4 つが生成されます。

これは私とまったく同じではありません。他の誰かがこの動作を見たことがありますか。私は何かを誤解しているだけですか?

4

2 に答える 2

1

新しい投稿をご覧ください。Hashimi MSPress book をご覧ください - 強くお勧めします。

TeamBuild を使用している場合は、ビルド サービス構成ファイルで MaxProcesses を調整する必要があります。[しかし、あなたは言ったでしょう。]

自分で msbuild を実行している場合は、何かを実行するために /m を指定して msbuild を呼び出す必要があります。

@(ProjList) 内のすべてのファイルに ToolsVersion = 3.5 が含まれていますか?

于 2009-07-14T14:49:08.717 に答える