Używam TeamCity, który z kolei wywołuje msbuild (.NET 4). Mam dziwny problem polegający na tym, że po ukończeniu kompilacji (i wydaje się, że nie ma znaczenia, czy była to pomyślna kompilacja, czy nie), msbuild.exe pozostaje otwarty i blokuje jeden z plików, co oznacza, że za każdym razem, gdy TeamCity próbuje aby wyczyścić swój katalog roboczy, kończy się niepowodzeniem i nie można kontynuować.
Dzieje się to prawie za każdym razem.
Jestem naprawdę zagubiony, więc postaram się podać jak najwięcej szczegółów.
- Serwer to procesor Intel Core i7, 2 GB pamięci RAM, ze standardowym 64-bitowym dodatkiem SP2 systemu Windows Server 2008.
- W TeamCity program uruchamiający msbuild jest konfigurowany za pomocą
/m
parametru wiersza polecenia (co oznacza użycie wielu rdzeni) - Plik, o którym mowa, jest ZAWSZE tą samą zewnętrzną biblioteką DLL, do której odwołuje się jeden z projektów .NET w ścieżce
External Tools\Telerik\Telerik.Reporting.Dll
. (Istnieje kilka innych plików .DLL zawartych w kataloguExternal Tools
w podobnej strukturze ścieżek, które nigdy nie powodują tego problemu). Obecnie dotyczy to wersji próbnej raportów Telerik, na wypadek gdyby miało to jakiekolwiek znaczenie. - Kiedy pojawia się problem,
msbuild.exe *32
w Menedżerze zadań zawsze znajduje się kilka procesów: Myślę, że jest ich 7. Używając Process Explorer, wszystkie wyglądają jak procesy najwyższego poziomu (bez rodziców). Wszystkie używają 20-50 MB pamięci RAM i 0,0% procesora. - Jeśli odczekam 1–3 minuty, procesy msbuild.exe same się zakończą, a TeamCity może poprawnie zaktualizować katalog roboczy.
- Jeśli ręcznie zakończę procesy msbuild, aktualizacja TeamCity znów zadziała natychmiast.
- Usługi indeksowania są wyłączone w systemie Windows (chociaż poprzednie dwa punkty prawie potwierdzają, że przyczyną problemu jest plik msbuild.exe).
- W pliku Telerik.reporting.dll nie ma specjalnych właściwości. Jedyną właściwością SVN jest
svn:mime-type = application/octet-stream
Czy ktoś już to spotkał?
/m /nr:false
, uruchomię kilka kompilacji i zobaczę, jak pójdzie. DziękiAby wyłączyć ponowne użycie węzłów w programie Visual Studio, należy użyć zmiennej środowiskowej:
źródło