Jak mogę sprawić, by TeamCity skorzystało z przyrostowej obsługi MSBuild?

Ustawiam TeamCity (migracja z CruiseControl.NET) i staram się, aby mogła ona wykonywać przyrostowe kompilacje poprzez MSBuild.

Mam mały plik .proj, który zawiera podstawowy skrypt budowania, aby wywołać kompilację mojego rozwiązania z niektórymi parametrami wprowadzonymi z TeamCity. Kiedy wywołam skrypt ręcznie, MSBuild'sPrzyrostowa budowa funkcje uruchamiają się i pomijają kompilację całkowicie w kolejnych seriach.

Podczas wywoływania tego skryptu przez Team City, dziennik kompilacji pokazuje wynik czystej kompilacji za każdym razem. Obserwowałem katalog roboczy podczas kompilacji i widzę, że wyjście z poprzedniej kompilacji nigdzie nie poszło.

Skrypt budowania ręcznie wywołałem również z tego katalogu, przenosząc go na serwer i uruchamiając MSBuild z wiersza polecenia. Uruchamianie go w ten sposób powoduje oczekiwane przyrostowe kompilacje po pierwszym wywołaniu.

Nawet po uruchomieniu kompilacji z pulpitu nawigacyjnego bez dokonanych zmian następuje całkowita przebudowa.

Nie mogę wskazać przyczyny, ale wydaje się, że MSBuild ma wrażenie, że otrzymuje nowe zmiany i powoduje, że wykonuje przebudowę przy każdym uruchomieniu. Nie widzę zbyt wiele w dokumentacji TeamCity, która by to wyjaśniała - moje oczekiwanie jest takie, że jeśli nie ma żadnych zmian w systemie kontroli źródeł, nie zaktualizuje folderu roboczego.

Czy TeamCity przekazuje jakiś parametr do procesu budowania, który uruchamia odbudowę? Czy mogę wyświetlić te parametry?

Po sprawdzeniu szczegółu dziennika MSBuild (/v:d przełącznik wiersza polecenia), przyczyna całkowitej przebudowy jest spowodowana plikiem.NETFramework,Version=v4.0.AssemblyAttributes.cs aktualizowany w<Agent>\temp\buildTmp katalog na każdej kompilacji.

Ten plik zwykle znajduje się pod adresem%TMP%\.NETFramework,Version=v4.0.AssemblyAttributes.cs; TeamCity zmienia zmienną środowiskową lokalnego katalogu tymczasowego, aby odwołać się do folderu tymczasowego agenta. Niestety ten plik jest tworzony przezMicrosoft.Common.targets część procesu budowania, gdy jest nieobecna. Usunięcie pliku „temp” przed każdą kompilacją powoduje, że jest tworzony w każdej kompilacji i jest dynamicznie przywoływany w kompilacji każdego pliku projektu.

Muszę znaleźć sposób, aby zapobiec ponownemu tworzeniu tego pliku w każdej kompilacji.

questionAnswers(3)

yourAnswerToTheQuestion