Usare più processori per la compilazione di progetti
MSBuild è in grado di trarre vantaggio dai sistemi che dispongono di più processori o di più componenti principali. Per ogni processore disponibile viene creato un processo di compilazione separato. Se, ad esempio, nel sistema sono presenti quattro processori, vengono creati quattro diversi processi di compilazione. MSBuild può elaborare queste compilazioni contemporaneamente e quindi il tempo di compilazione complessivo è ridotto. Tuttavia, la compilazione parallela introduce alcune modifiche ai processi di compilazione. Questo argomento descrive queste modifiche.
Riferimenti da progetto a progetto
Quando il motore di compilazione Microsoft rileva un riferimento da progetto a progetto (P2P) mentre usa compilazioni parallele per compilare un progetto, compila il riferimento una sola volta. Se due progetti presentano lo stesso riferimento P2P, questo non viene ricompilato per ogni progetto. Il motore di compilazione restituisce invece lo stesso riferimento P2P a entrambi i progetti dipendenti. Eventuali richieste successive nella sessione per la stessa destinazione offriranno lo stesso riferimento P2P.
Rilevamento del ciclo
Il rilevamento del ciclo funziona come in MSBuild 2.0, con la differenza che ora MSBuild può segnalare il rilevamento del ciclo in un'ora diversa o nella compilazione.
Errori ed eccezioni durante le compilazioni parallele
Nelle compilazioni parallele possono verificarsi errori ed eccezioni in momenti diversi rispetto a quanto avviene nelle compilazioni non parallele e, se un progetto non viene compilato, gli altri processi di compilazione di progetti proseguono normalmente. MSBuild non arresterà alcuna compilazione di progetto che viene compilata in parallelo con quella che non è riuscita. La compilazione degli altri progetti continua finché non viene completata correttamente o non si verifica un errore. Tuttavia, se ContinueOnError è stato abilitato, nessuna compilazione verrà arrestata anche se si verifica un errore.
File di progetto C++ (con estensione vcxproj) e soluzione (con estensione sln)
Entrambi i progetti C++ (vcxproj) e i file di soluzione (con estensione sln) possono essere passati all'attività MSBuild. Per i progetti C++, viene chiamato VCWrapperProject e quindi viene creato il progetto MSBuild interno. Per le soluzioni C++, viene creato un oggetto SolutionWrapperProject e quindi viene creato il progetto MSBuild interno. In entrambi i casi, il progetto risultante viene considerato uguale a qualsiasi altro progetto MSBuild.
Esecuzione di più processi
Quasi tutte le attività correlate alla compilazione richiedono che la directory corrente rimanga costante durante l'intero processo di compilazione per evitare errori di percorso. Di conseguenza, i progetti non possono essere eseguiti in thread diversi in MSBuild perché potrebbero creare più directory.
Per evitare questo problema ma abilitare ancora compilazioni multiprocessore, MSBuild usa l'isolamento del processo. Usando l'isolamento del processo, MSBuild può creare un massimo di n
processi, in cui n
è uguale al numero di processori disponibili nel sistema. Ad esempio, se MSBuild compila una soluzione in un sistema con due processori, vengono creati solo due processi di compilazione. Questi processi vengono poi riusati per compilare tutti i progetti nella soluzione.