Partilhar via


MSBuild usa vários processadores para criar projetos

O MSBuild pode tirar o máximo proveito de sistemas que têm vários processadores ou processadores de vários núcleos, criando um processo de compilação separado para cada processador. Por exemplo, se um sistema tiver quatro processadores, o MSBuild criará quatro processos de compilação.

O MSBuild pode processar as várias compilações simultaneamente, o que reduz o tempo geral de compilação. No entanto, compilações paralelas podem introduzir alterações em como os processos de compilação ocorrem.

Este artigo descreve as alterações de processo que podem ocorrer quando várias compilações são executadas simultaneamente.

Referências de projeto a projeto

Quando o Microsoft Build Engine encontra uma referência de projeto (ProjectReference elemento ) durante compilações paralelas para um projeto, ele cria a referência apenas uma vez. Se dois projetos tiverem a mesma referência de projeto, a referência não será reconstruída para cada projeto. Em vez disso, o mecanismo de compilação retorna a mesma referência de projeto para ambos os projetos que têm a dependência. O MSBuild também fornece a mesma referência de projeto para solicitações futuras na sessão para o mesmo destino.

Deteção de ciclo

A deteção de ciclo durante compilações paralelas é o mesmo comportamento do MSBuild 2.0. A única diferença é que a versão mais recente do MSBuild pode relatar a deteção do ciclo em um momento diferente ou na compilação.

Erros e exceções durante compilações paralelas

Durante compilações paralelas, erros e exceções podem ocorrer em momentos diferentes do que durante uma compilação não paralela. Além disso, se um projeto não for compilado, o outro projeto continua a compilar.

O MSBuild não interrompe a compilação de projetos em paralelo quando uma compilação falha. Outros projetos continuam a ser construídos até serem bem-sucedidos ou fracassarem. Quando a ContinueOnError configuração está ativada, nenhuma compilação é interrompida, mesmo que ocorra um erro.

Arquivos de projeto (.vcxproj) e solução (.sln) C++

Os arquivos de projeto (.vcxproj) e solução (.sln) C++ podem ser passados para a tarefa MSBuild.

  • Projetos C++: A API VCWrapperProject é chamada e, em seguida, o projeto MSBuild interno é criado.
  • Soluções C++: Uma instância SolutionWrapperProject é criada e, em seguida, o projeto MSBuild interno é criado.

Em ambos os casos, o projeto resultante é tratado como qualquer outro projeto MSBuild.

Execução multiprocesso

Quase todas as atividades relacionadas à compilação exigem que o diretório atual permaneça constante durante todo o processo de compilação para evitar erros relacionados ao caminho. Projetos não podem ser executados em threads diferentes no MSBuild porque eles podem causar a criação de vários diretórios.

Para evitar esse problema, mas ainda habilitar compilações de vários processadores, o MSBuild usa o isolamento do processo. Este processo permitiu que o MSBuild criasse um máximo de n processos, onde n é igual ao número de processadores disponíveis no sistema. Por exemplo, se o MSBuild cria uma solução em um sistema com dois processadores, apenas dois processos de compilação são criados. Esses processos são reutilizados para construir todos os projetos na solução.