2011-11-17 12 views
8

Mamy projekt, w którym pliki .js i .css zostają skompresowane za pomocą kompresora YUI. Bardzo dobre narzędzie. Używamy także TFS 2010 jako serwera kompilacji z nocnymi kompilacjami, które są również wdrażane na naszej stronie internetowej dev.Kompresor YUI i TFS Build

Problem polega na tym, że plik YUI generuje przyczyny "Odmowa dostępu" - problem. Dzieje się tak dlatego, że istnieje już taki plik wygenerowany wcześniej i że jest częścią projektu, czyniąc go tylko do odczytu. Możemy jednak usunąć go z projektu i powinien on tworzyć się dobrze. Problem polega na tym, że wygenerowany plik nie jest dołączany do rzeczywistego pakietu wdrażania.

Lokalnie nie mam problemu, ponieważ mam skrypt komendy poprzedzającej kompilację zdarzeń, który usuwa istniejące pliki. To najwyraźniej nie działa na serwerze kompilacji. Być może użytkownik kontekstu tfs nie ma pozwolenia, nie wiem.

Czy jest ktoś, kto mógł mieć podobne problemy?

Aktualizacja 21/11: Pytanie może być nieznaczne. Uproszczenie, pozwala tylko powiedzieć, chcę to do pracy, jak to robi lokalnie:

IF NOT $(ConfigurationName) == DEBUG DEL "$(ProjectDir)Styles\styles.min.css 
IF NOT $(ConfigurationName) == DEBUG DEL "$(ProjectDir)JavaScript\script.min.js 

ta jest zdefiniowana w wierszu polecenia zdarzenia pre-build, pod właściwości projektu -> Budowanie wydarzenia.

Skrypt usuwa pliki przed wygenerowaniem pliku YUI, a zatem nie ma pliku do zastąpienia. Czy to możliwe, że kontekst użytkownika, który wykonuje kompilację TFS, ma niewystarczające uprawnienia do modyfikacji?

ROZWIĄZANIE:

Skończyło się z następującego kodu w przypadku pre-produkcji:

attrib -r "$(ProjectDir)Styles\styles.min.css" 
attrib -r "$(ProjectDir)JavaScript\script.min.js" 
IF NOT $(ConfigurationName) == Debug $(MSBuildBinPath)\msbuild.exe "$(ProjectDir)Config\MSBuild\BuildSettings.xml" 

/Mattias

+0

Myślę, że pierwszym krokiem będzie odczytanie pliku dziennika budowania TFS i sprawdzenie, czy uruchomione jest zadanie wstępne. Rozważ dodanie "attrib -r" do skryptu zdarzenia prebuild, aby wyłączyć flagę tylko do odczytu dla pliku, który zostanie wygenerowany. –

+0

Nadal nie rozumiem twojego pytania ... Czy próbujesz dowiedzieć się, dlaczego krok pre-build nie działa na serwerze budowania TFS? –

+0

Zastanawiałem się, jak rozwiązać problem automatycznego generowania plików w ramach kompilacji, gdy pliki już istnieją (i tylko do odczytu). Być może zastosujemy tę samą technikę użycia zdarzenia pre-build, aby usunąć je wszystkie. – GarethOwen

Odpowiedz

4

Jeśli pliki są częścią projektu i pobranego od repozytorium TFS, najpierw usuń flagę tylko do odczytu, jeśli potrzebujesz wykonać jakiekolwiek przetwarzanie, na przykład usunąć. W swoim scenariuszu najpierw:

attrib -r *.js 
attrib -r *.css 

Powinien być w stanie usunąć je dobrze po tym. Prawdopodobnie nie jest to problem z uprawnieniami, ponieważ konto używane do pobierania plików to także konto używane do ich usuwania.

+0

Pracował jak urok. Dziękuję Ci! – Mattias

Powiązane problemy