Aracılığıyla paylaş


MSBuild, proje oluşturmak için birden çok işlemci kullanır

MSBuild, her işlemci için ayrı bir derleme işlemi oluşturarak birden çok işlemciye veya çok çekirdekli işlemciye sahip sistemlerden tam olarak yararlanabilir. Örneğin, bir sistemin dört işlemcisi varsa, MSBuild dört derleme işlemi oluşturur.

MSBuild birden çok derlemeyi aynı anda işleyebilir ve bu da genel derleme süresini kısaltabilir. Ancak paralel derlemeler, derleme işlemlerinin nasıl gerçekleştiğinde değişikliklere neden olabilir.

Bu makalede, birden çok derleme aynı anda çalıştırıldığında oluşabilecek işlem değişiklikleri açıklanmaktadır.

Projeden projeye referanslar

Microsoft Derleme Altyapısı, bir proje için paralel derlemeler sırasında bir proje başvurusuyla (ProjectReference öğesi) karşılaştığında, başvuruyu yalnızca bir kez oluşturur. İki proje aynı proje referansına sahipse, referans her proje için yeniden derlenmez. Bunun yerine, derleme motoru bağımlılığı olan her iki projeye de aynı proje başvurusunu döndürür. MSBuild, aynı hedef için oturumda ileride yapılacak isteklere de aynı proje referansını sunar.

Döngü algılama

Paralel derlemeler sırasında döngü algılama, MSBuild 2.0 ile aynı davranıştır. Tek fark, MSBuild'in daha yeni sürümünün döngünün farklı bir zamanda veya derlemede algılandığını bildirebiliyor olmasıdır.

Paralel derlemeler sırasında hatalar ve özel durumlar

Paralel derlemeler sırasında hatalar ve özel durumlar, genel olmayan derlemeler sırasında oluşandan farklı zamanlarda oluşabilir. Ayrıca, bir proje derlenmiyorsa, diğer projelerin derlemesi devam eder.

MSBuild, başarısız bir derlemeyle paralel olarak herhangi bir proje derlemeyi durdurmaz. Diğer projeler ya başarılı olana ya da başarısız olana kadar geliştirmeye devam eder. ContinueOnError Ayar etkinleştirildiğinde, hata oluşsa bile hiçbir derleme durmaz.

C++ proje (.vcxproj) ve çözüm (.sln) dosyaları

Hem C++ projesi (.vcxproj) hem de çözüm (.sln) dosyaları MSBuild görevine geçirilebilir.

  • C++ projeleri: VCWrapperProject API'si çağrılır ve ardından iç MSBuild projesi oluşturulur.
  • C++ çözümleri: Bir SolutionWrapperProject örneği oluşturulur ve ardından iç MSBuild projesi oluşturulur.

Her iki durumda da, sonuçta elde edilen proje diğer MSBuild projeleri gibi işlenir.

Çok işlemli yürütme

Neredeyse tüm derlemeyle ilgili aktiviteler, yol ile ilgili hataları önlemek için derleme işlemi boyunca geçerli dizinin değişmeden kalmasını gerektirir. Projeler, birden çok dizin oluşturulmasına neden olabileceğinden MSBuild'deki farklı iş parçacıklarında çalışamaz.

Bu sorunu önlemek ancak yine de çok işlemcili derlemeleri etkinleştirmek için MSBuild işlem yalıtımı kullanır. MSBuild, sistemdeki kullanılabilir işlemci sayısına eşit olan n kadar en fazla n işlem oluşturmasını sağlayan bu işlemi etkinleştirdi. Örneğin, MSBuild iki işlemcili bir sistemde bir çözüm oluşturursa, yalnızca iki derleme işlemi oluşturulur. Bu işlemler çözümdeki tüm projeleri oluşturmak için yeniden kullanılır.