MSBuild Server

MSBuild Server migliora le prestazioni delle compilazioni di .NET Core, che vengono richiamate quando si usa il dotnet build comando dall'interfaccia della riga di comando di .NET in ambienti di compilazione Windows, Linux o Mac .NET Core. Invece di avviare il processo di compilazione ogni volta che viene richiesta una compilazione, gran parte del contesto viene memorizzata nella cache in un processo a esecuzione prolungata in modo che sia disponibile per essere riutilizzata dalla compilazione successiva. MSBuild Server non è rilevante per le compilazioni di Visual Studio, perché Visual Studio funge da host per MSBuild e memorizza già nella cache tutto il contesto necessario.

Il server MSBuild in genere non è utile in scenari di integrazione continua, ad esempio compilazioni di Azure Pipeline, perché le pipeline in genere pongono un ambiente di compilazione su richiesta per ogni compilazione e quindi eliminarlo al termine della compilazione.

Abilitare il server MSBuild

A partire da .NET 11 SDK, MSBuild Server è abilitato per impostazione predefinita per i comandi dell'interfaccia della riga di comando basati su MSBuild .NET, dotnet build ad esempio e dotnet msbuild.

Nelle versioni precedenti .NET SDK, MSBuild Server era disattivato per impostazione predefinita ed è stato abilitato impostando DOTNET_CLI_USE_MSBUILD_SERVER su true o 1.

La prima volta che si avvia una compilazione, viene avviato il server di compilazione e la cache viene popolata. La cache viene salvata in modo permanente dopo il completamento della compilazione; la seconda compilazione procede quindi più velocemente poiché il tempo di avvio è notevolmente ridotto a causa delle informazioni memorizzate nella cache. La cache viene mantenuta dopo il completamento della compilazione, ma dopo un periodo di inattività di 15 minuti, il server viene arrestato. Pertanto, è particolarmente utile negli scenari di compilazione ripetitivi in cui molte compilazioni vengono richieste in successione ravvicinata.

MSBuild Server viene inoltre attivato automaticamente per le compilazioni multithreading (-mt), perché l'esecuzione multithreading esegue il lavoro del progetto all'interno del processo server.

Arrestare o disabilitare MSBuild Server

Esistono diversi modi per disabilitare l'uso del server MSBuild. Se si vuole semplicemente arrestare il server in esecuzione, è possibile eseguire il comando dotnet build-server shutdown.

Per disabilitare la funzionalità per tutte le compilazioni in un computer, è possibile impostare la variabile DOTNET_CLI_USE_MSBUILD_SERVER di ambiente di sistema su false. È anche possibile impostare questa variabile in base al progetto in uno strumento come VS Code in launch.json.

Per disabilitare MSBuild Server per una chiamata specifica di una compilazione da riga di comando, è possibile usare l'opzione /nr:false (o /node-reuse:false). MSBuild Server è una forma di riutilizzo dei nodi, pertanto la disabilitazione del riutilizzo del nodo disabilita anche il server e la compilazione viene eseguita nel processo di avvio.

Il server MSBuild non viene usato per le chiamate intrinsecamente incompatibili con l'hosting della compilazione in un processo separato, ad esempio -help, -versione la riproduzione di un log binario. Queste compilazioni rientrano nell'esecuzione nel processo di avvio.

Determinare lo stato corrente del server di compilazione

È possibile visualizzare lo stato del processo nel computer e cercare i processi del server MSBuild. I processi del server MSBuild vengono avviati con dotnet.exe e mostrano un percorso per MSBuild.dll e l'opzione /nodemode:8di comando , dove 8 indica MSBuild Server ( /nodemode:1 indica i normali nodi del ruolo di lavoro MSBuild).

Le build che richiedono MSBuild Server registrano anche ciò che gli accade. Esegui con -v:diag, oppure acquisisci un log binario con -bl, per vedere se la compilazione avvia un nuovo server, ne riutilizza uno già in esecuzione oppure ripiega su una compilazione nel processo, e il motivo.

Vedere anche