Usar vários processadores para criar projetos
MSBuild pode tirar proveito dos sistemas com vários processadores ou vários núcleos processadores. Um processo de compilação separado é criado para cada processador disponível. Por exemplo, se o sistema possui quatro processadores, então quatro processos de compilação são criados. O MSBuild pode processar essas compilações simultaneamente e, portanto, em geral o tempo de compilação é reduzido. No entanto, a construção em paralelo apresenta algumas alterações em como os processos de compilação ocorrem. Este tópico aborda essas alterações.
Referências projeto a projeto
Quando o Microsoft Build Engine encontra uma referência de projeto para projeto (P2P) enquanto ela está usando paralelo compilações para compilar um projeto, ele cria a referência de apenas uma vez. Se dois projetos tiverem a mesma referência P2P, a referência não é reconstruída para cada projeto. Em vez disso, o mecanismo de compilação retorna a mesma referência P2P para ambos os projetos que dependem dele. As solicitações futuras na sessão para o mesmo destino recebem a mesma referência P2P.
Detecção do ciclo
A detecção de ciclo funciona da mesma forma como no MSBuild 2.0, com a exceção de que, agora, o MSBuild pode relatar a detecção de ciclo em um momento diferente ou na compilação.
Erros e exceções durante compilações paralelas
Em compilações paralelas, erros e exceções podem ocorrer em momentos diferentes que fazem em uma compilação não paralelos e quando um projeto não será compilado, continuam as compilações do projeto. O MSBuild não parará nenhuma compilação do projeto que esteja sendo criada em paralelo com aquela que falhou. Outros projetos continuam a ser criados até que tenham êxito ou falha. No entanto, se ContinueOnError foi habilitado, então nenhum build será interrompido, mesmo que ocorra um erro.
Arquivos de projeto (.vcxproj) e de solução (.sln) C++
Ambos os arquivos de projetos (.vcxproj) e solução (.sln) C++ podem ser passados para as tarefas do MSBuild. Para projetos C++, é chamado o VCWrapperProject e, então, é criado o projeto interno do MSBuild. Para soluções C++, um SolutionWrapperProject é criado e, em seguida, é criado o projeto interno do MSBuild. Em ambos os casos, o projeto resultante será tratado da mesma forma que qualquer outro projeto do MSBuild.
Execução multiprocesso
Quase todas as atividades relacionadas à compilação exigem o diretório atual para permanecer constante ao longo do processo de compilação para evitar erros de caminho. Portanto, projetos não podem ser executado em threads diferentes no MSBuild porque eles fariam com que vários diretórios fossem criados.
Para evitar esse problema, mas ainda habilitar compilações de vários processadores, o MSBuild usa o "isolamento de processo". Ao fazer isso, o MSBuild pode criar um máximo de n
processos, em que n
é igual ao número de processadores disponíveis no sistema. Por exemplo, se o MSBuild compilar uma solução em um sistema com dois processadores, somente dois processos de compilação serão criados. Novamente, esses processos são usados para criar todos os projetos na solução.