Dela via


MSBuild använder flera processorer för att skapa projekt

MSBuild kan dra full nytta av system som har flera processorer eller processorer med flera kärnor genom att skapa en separat byggprocess för varje processor. Om ett system till exempel har fyra processorer skapar MSBuild fyra byggprocesser.

MSBuild kan bearbeta flera versioner samtidigt, vilket minskar den totala byggtiden. Parallella versioner kan dock medföra ändringar i hur byggprocesserna sker.

I den här artikeln beskrivs processändringar som kan inträffa när flera versioner körs samtidigt.

Projekt-till-projekt-referenser

När Microsoft Build Engine stöter på en projektreferens (ProjectReference element) under parallella versioner för ett projekt skapas referensen endast en gång. Om två projekt har samma projektreferens återskapas inte referensen för varje projekt. I stället returnerar byggmotorn samma projektreferens till båda projekten som har beroendet. MSBuild tillhandahåller också samma projektreferens till framtida begäranden i sessionen för samma mål.

Cykeldetektion

Cykelidentifiering under parallella kompileringar är samma som för MSBuild 2.0. Den enda skillnaden är att den nyare versionen av MSBuild kan rapportera upptäckten av cykeln vid en annan tidpunkt eller under byggprocessen.

Fel och undantag under parallella versioner

Under parallella versioner kan fel och undantag inträffa vid olika tidpunkter än vid en icke-parallell version. Om ett projekt inte byggs, fortsätter de andra projekten att byggas.

MSBuild stoppar inte några projekt som byggs parallellt vid en misslyckad kompilering. Andra projekt fortsätter att byggas tills de lyckas eller misslyckas. När inställningen ContinueOnError är aktiverad stoppas inga versioner, även om ett fel inträffar.

C++-projekt (.vcxproj) och lösningsfiler (.sln)

Både C++-projektfiler (.vcxproj) och lösningsfiler (.sln) kan skickas till MSBuild-aktiviteten.

  • C++-projekt: API:et VCWrapperProject anropas och sedan skapas det interna MSBuild-projektet.
  • C++-lösningar: En SolutionWrapperProject-instans skapas och sedan skapas det interna MSBuild-projektet.

I båda fallen hanteras det resulterande projektet som alla andra MSBuild-projekt.

Exekvering med flera processer

Nästan alla byggrelaterade aktiviteter kräver att den aktuella katalogen förblir konstant under hela byggprocessen för att förhindra sökvägsrelaterade fel. Projekt kan inte köras på olika trådar i MSBuild eftersom de kan orsaka skapandet av flera kataloger.

För att undvika det här problemet men ändå aktivera versioner med flera processorer använder MSBuild processisolering. Den här processen gjorde det möjligt för MSBuild att skapa ett maximalt antal n processer, där n lika med antalet tillgängliga processorer i systemet. Om MSBuild till exempel skapar en lösning på ett system med två processorer skapas endast två byggprocesser. Dessa processer återanvänds för att skapa alla projekt i lösningen.