MSBuild Server では、.NET Core ビルドのパフォーマンスが向上します。これは、Windows、Linux、または Mac .NET Core ビルド環境で .NET CLI から dotnet build コマンドを使用すると呼び出されます。 ビルドが要求されるたびにビルド プロセスを開始する代わりに、コンテキストの多くは実行時間の長いプロセスにキャッシュされるため、次のビルドで再利用できます。 VISUAL STUDIOは MSBuild のホストとして機能し、必要なすべてのコンテキストを既にキャッシュしているため、MSBuild Server はVisual Studioビルドには関係ありません。
通常、MSBuild Server は、Azure Pipeline ビルドなどの CI シナリオでは役に立ちません。パイプラインは通常、ビルドごとに必要に応じてビルド環境を立ち上げ、ビルドの完了時に破棄するためです。
MSBuild サーバーを有効にする
.NET 11 SDK 以降、MSBuild Server は、MSBuild ベースの .NET CLI コマンド (dotnet buildやdotnet msbuildなど) に対して既定で有効になっています。
以前の.NET SDK では、MSBuild Server は既定でオフになっており、DOTNET_CLI_USE_MSBUILD_SERVERを true または 1 に設定することで有効にしていました。
ビルドを初めて開始すると、ビルド サーバーが起動され、キャッシュが設定されます。 キャッシュは、そのビルドの完了後に永続化されます。したがって、キャッシュされた情報により起動時間が大幅に短縮されるため、2 番目のビルドは高速に進みます。 キャッシュはビルドが完了した後も保持されますが、アイドル時間が 15 分経過すると、サーバーはシャットダウンします。 そのため、多くのビルドが連続して要求される繰り返しのビルド シナリオで主に役立ちます。
また、マルチスレッド実行ではサーバー プロセス内でプロジェクトが動作するため、MSBuild Server はマルチスレッド ビルド (-mt) にも自動的に関与します。
MSBuild サーバーのシャットダウンまたは無効化
MSBuild サーバーの使用を無効にする方法はいくつかあります。 実行中のサーバーをシャットダウンするだけの場合は、コマンド dotnet build-server shutdownを発行できます。
コンピューター上のすべてのビルドの機能を無効にするには、システム環境変数の DOTNET_CLI_USE_MSBUILD_SERVER を false に設定します。 また、 launch.jsonの VS Code などのツールで、プロジェクトごとにこの変数を設定することもできます。
コマンド ライン ビルドの特定の呼び出しに対して MSBuild Server を無効にするには、オプション /nr:false (または /node-reuse:false) を使用できます。 MSBuild Server はノードの再利用の一種であるため、ノードの再利用を無効にすると、サーバーも無効になり、起動プロセスでビルドが実行されます。
MSBuild Server は、 -help、 -version、バイナリ ログの再生など、別のプロセスでのビルドのホストと本質的に互換性のない呼び出しには使用されません。 これらのビルドは、起動プロセスでの実行にフォールバックします。
ビルド サーバーの現在の状態を確認する
マシンのプロセスの状態を表示し、MSBuild サーバー プロセスを探すことができます。 MSBuild サーバー プロセスは dotnet.exe で起動され、MSBuild.dll へのパスとコマンド オプション /nodemode:8が表示されます。ここで、 8 は MSBuild Server を示します ( /nodemode:1 は通常の MSBuild ワーカー ノードを示します)。
MSBuild Server を要求するビルドでは、その処理も記録されます。
-v:diagで実行するか、-blを使用してバイナリ ログをキャプチャして、ビルドが新しいサーバーを起動するか、実行中のサーバーを再利用するのか、インプロセス ビルドにフォールバックするのか、その理由を確認します。