4

私はすぐに msbuild に完全に慣れていないことを認め、ばかげた質問をしていないことを願っています。

約 316 のプロジェクトを含む大規模な .NET ソリューションがあります。ビルド プロセス中、あるフォルダーから次のフォルダーに DLL をコピーすることで、大量のビルド時間が費やされているようです (つまり、参照を解決できるようにするためだと思います)。これを行う必要がないように、各プロジェクトの出力ファイルを1 つのフォルダーに入れるように MSBuild に指示する方法はありますか? 最終的には最終出力フォルダーから最終結果をコピーし、他のすべての中間 DLL は無駄になるため、これは賢明なことのように思えます。

4

3 に答える 3

4

OutDirプロパティをオーバーライドすることで可能です。例えば:

msbuild your.sln /p:Configuration=Release;OutDir="C:\SomeFolder\Release" /m

さらに、参照の CopyLocal 設定を無効にして、ビルド プロセスを高速化できます。

于 2012-07-07T18:34:10.760 に答える
2

(Visual Studioによって作成された)objフォルダーとbinフォルダーは何に使用されますか?を参照してください。

実際に時間がかかるコピーであることを確認してください。/ verbosity:diagを指定してmsbuildコマンドを実行します(または/ flp:Filename = <myfile>; Verbosity = diagを使用してファイルに書き込みます)。ファイルの最後に、各ステップにかかった時間が表示されます。

/mオプションを使用してビルドを並列化してみてください。デフォルトでは、msbuildは1つのスレッドで実行され、316のプロジェクトでは、これが遅くなる可能性があると想像できます。

于 2012-07-07T02:26:23.157 に答える
1

316 個のプロジェクトをビルドすることは、一度に多数のプロジェクトをビルドすることです。プロジェクトを依存関係を分離する論理的なソリューションに分割することを検討できます。

また、最大 CPU カウント プロパティをより高い値に設定してプロジェクトを並行してビルドすることで、速度を上げます。

BuildInParallel は、MSBuild タスクのオプションのブール値パラメーターです。BuildInParallel が true (デフォルト値) に設定されている場合、できるだけ多くのプロジェクトを同時にビルドするために複数のワーカー プロセスが生成されます。これが正しく機能するには、/maxcpucount スイッチを 1 より大きい値に設定する必要があり、システムは少なくともデュアル コアであるか、2 つ以上のプロセッサを搭載している必要があります。

BuildInParallel パラメーターの設定方法について、microsoft.common.targets から抜粋した例を次に示します。/maxcpucount:number ビルドに関与するワーカー プロセスの数を指定します。例: C:\Windows\WinFX\v3.5>msbuild.exe *.proj /maxcpucount:3。この例では、3 つの MSBuild.exe プロセスを使用してビルドするように MSBuild に指示しているため、3 つのプロジェクトを並行してビルドできます。/m も使用できます。

于 2012-07-09T11:42:11.010 に答える