msbuild.exe açık kalıyor, dosyaları kilitliyor


99

TeamCity kullanıyorum ve bu da msbuild'i (.NET 4) çağırıyor. Bir derleme tamamlandıktan sonra (ve başarılı bir yapı olup olmadığı önemli görünmüyor), msbuild.exe açık kalıyor ve dosyalardan birini kilitliyor, bu da TeamCity'nin her denediğinde çalışma dizinini temizlemek için başarısız olur ve devam edemez.

Bu neredeyse her seferinde olur .

Bu konuda gerçekten kayboldum, bu yüzden olabildiğince fazla ayrıntı sağlamaya çalışacağım.

  • Sunucu, Windows Server 2008 standart 64-bit SP2'ye sahip bir Intel Core i7, 2 GB ramdır.
  • TeamCity'de msbuild çalıştırıcısı, /mkomut satırı parametresi ile yapılandırılır (bu, birden çok çekirdek kullanmak anlamına gelir)
  • Söz konusu dosya HER ZAMAN yolda .NET projelerinden birinde başvurulan aynı harici DLL'dir External Tools\Telerik\Telerik.Reporting.Dll. ( External ToolsBu soruna hiçbir zaman neden olmayan benzer bir yol yapısında dizinde bulunan birkaç başka .DLL dosyası vardır ). Şu anda bu, herhangi bir fark yaratması durumunda Telerik raporlarının deneme sürümüyle.
  • Sorun oluştuğunda, msbuild.exe *32Görev yöneticisinde her zaman birkaç işlem listelenir: Sanırım 7. İşlem Gezgini kullanıldığında, hepsi üst düzey süreçlere benziyor (üst düzey süreçler yok). Hepsi 20-50MB ram ve% 0.0 CPU kullanıyor.
  • 1-3 dakika beklersem, msbuild.exe işlemleri kendiliğinden çıkar ve TeamCity daha sonra çalışma dizinini düzgün şekilde güncelleyebilir.
  • Msbuild süreçlerini manuel olarak sonlandırırsam, TeamCity'nin güncellemesi hemen tekrar çalışacaktır.
  • Windows'ta dizin oluşturma hizmetleri kapalı (önceki iki nokta soruna neden olan msbuild.exe olduğunu doğrulasa da).
  • Telerik.reporting.dll üzerinde özel bir özellik yok. Tek SVN özelliğisvn:mime-type = application/octet-stream

Bunu daha önce gören oldu mu?

Yanıtlar:


125

Kullanım msbuildile /nr:false.

Kısaca: MSBuild, özellikle paralel derlemelerde hızlı olmak için birçok şey yapmaya çalışır. Projeleri derleyebilen çok sayıda "düğüm" - ayrı msbuild.exe işlemleri üretecek ve süreçlerin dönmesi biraz zaman aldığı için, derleme tamamlandıktan sonra bu işlemler takılıyor (varsayılan olarak, 15 dakikadır, sanırım ), böylece kısa süre sonra tekrar derlerseniz, bu düğümler "yeniden kullanılabilir" ve işlem kurulum maliyetinden tasarruf sağlar. Ancak, yukarıda belirtilen komut satırı seçeneğiyle nodeReuse'u kapatarak bu davranışı devre dışı bırakabilirsiniz.

Ayrıca bakınız:


2
Mantıklı: / m'yi kaldırırsam bu gerçekleşmiyor gibi görünüyor. Şimdi deniyorum /m /nr:false, birkaç yapı için koşacağım ve nasıl gittiğini göreceğim. Teşekkürler
gregmac

26
Bu msbuild seçeneğiyle projeyi oluşturmak için Visual Studio'yu nasıl elde edersiniz?
Cameron Taggart

1
Yine de bilmek istiyorum, ancak aslında C ++ / CLI projeleri için bir Visual Studio 11 Beta hatasıyla karşılaştım. Aynı semptomlara neden olur: connect.microsoft.com/VisualStudio/feedback/details/728912/…
Cameron Taggart

3
Erken optimizasyon gerçekten tüm kötülüklerin köküdür. Berbatsın Microsoft.
johnwbyrd

1
@CameronTaggart Proje / çözüm klasörünüzde barındırılan özel bir dosya ile msbuild komut satırı seçeneklerini ekleyebilirsiniz. Bkz. Docs.microsoft.com/en-us/visualstudio/msbuild/…
needfulthing

44

Visual Studio içinde düğüm yeniden kullanımını devre dışı bırakmak için bir ortam değişkeni kullanmanız gerekir:

MSBUILDDISABLENODEREUSE=1

Bunu etkili bir şekilde kullandım, ancak şimdi C ++ 'ı VS11 Beta ile derlerken başarısız olan başka bir araç var, bu mt.exe, bunun için kullanılacak başka değişken var mı?
Eugenio Miró

VS'de herhangi bir yerde bir iletişim kutusu kullanılarak ayarlanamaz mı?
dom_beau

1
@dan Samimi, bunu bulduğunuz için teşekkürler ve Microsoft.VisualStudio.Web.Host.exe'yi de devre dışı bırakmak için bir ortam değişkeni olması için dua ediyorum .
jerhewet

Bu aynı zamanda komut satırından bir derleme çalıştırırken de işe yarar, örneğin toplu komut dosyası, derleme sunucusu vb.
Dave E
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.