Sdílet prostřednictvím


Nástroj MSBuild používá k sestavení projektů více procesorů.

Nástroj MSBuild může plně využít výhod systémů, které mají více procesorů nebo vícejádrových procesorů vytvořením samostatného procesu sestavení pro každý procesor. Pokud má například systém čtyři procesory, nástroj MSBuild vytvoří čtyři procesy sestavení.

Nástroj MSBuild může zpracovávat více sestavení současně, což zkracuje celkovou dobu sestavení. Paralelní sestavení však mohou zavádět změny ve způsobu, jakým probíhají procesy sestavení.

Tento článek popisuje změny procesu, ke kterým může dojít, když současně běží více sestavení.

Odkazy mezi projekty

Když Microsoft Build Engine narazí během paralelních sestavení projektu na referenci projektu (ProjectReference element), sestaví tuto referenci pouze jednou. Pokud dva projekty mají stejný odkaz na projekt, odkaz se pro každý projekt znovu nevystaví. Místo toho modul sestavení vrátí stejný odkaz na oba projekty, které mají závislost. Nástroj MSBuild také poskytuje stejný odkaz na budoucí požadavky v relaci pro stejný cíl.

Detekce cyklu

Detekce cyklu během paralelních sestavení je stejné chování jako u nástroje MSBuild 2.0. Jedním rozdílem je, že novější verze nástroje MSBuild může hlásit detekci cyklu v jiném okamžiku nebo v sestavení.

Chyby a výjimky během paralelních sestavení

Během paralelních sestavení mohou chyby a výjimky nastat v jiném čase, než během neparalelního sestavení. Pokud se jeden projekt nepostaví, ostatní projekty se budou stále sestavovat.

Nástroj MSBuild nepřeruší žádné paralelní sestavení jiných projektů, i když dojde k neúspěšnému sestavení. Ostatní projekty budou pokračovat v sestavování, dokud nebudou úspěšné nebo selžou. ContinueOnError Pokud je nastavení povolené, nezastaví se žádné sestavení, ani když dojde k chybě.

Projekt C++ (.vcxproj) a soubory řešení (.sln)

Oba soubory projektu C++ (.vcxproj) a řešení (.sln) lze předat do úlohy MSBuild.

  • Projekty C++: Volá se rozhraní API VCWrapperProject a pak se vytvoří interní projekt MSBuild.
  • Řešení C++: Vytvoří se instance SolutionWrapperProject a pak se vytvoří interní projekt MSBuild.

V obou případech se výsledný projekt zpracovává stejně jako jakýkoli jiný projekt MSBuild.

Provádění více procesů

Téměř všechny aktivity související s sestavením vyžadují, aby aktuální adresář zůstal v průběhu procesu sestavení konstantní, aby se zabránilo chybám souvisejícím s cestou. Projekty se nedají spustit na různých vláknech nástroje MSBuild, protože můžou způsobit vytváření více adresářů.

Chcete-li se tomuto problému vyhnout, ale přesto povolit sestavení s více procesory, nástroj MSBuild používá izolaci procesů. Tento proces povolil nástroj MSBuild k vytvoření maximálního počtu n procesů, kde n se rovná počtu procesorů dostupných v systému. Například pokud MSBuild sestaví řešení na systému se dvěma procesory, vytvoří se pouze dva procesy sestavení. Tyto procesy se znovu používají k sestavení všech projektů v řešení.