2013-11-01 27 views
6

Używam zdarzeń poprzedzających/po kompilacji w moich plikach projektu VS2012 do wykonywania zadań kompilacji. Działa to doskonale dobrze lokalnie, ale mam problem z uruchomieniem go z naszego serwera budowania TFS 2012.Project TargetDir na serwerze budowania TFS

Lokalnie numer $(TargetDir) dla każdego projektu jest ustawiony na własny folder /bin.

Na serwerze kompilacji jest on jednak ustawiony na pojedynczy folder /bin poza folderem głównym rozwiązania, w którym konsoliduje wszystkie skompilowane pliki binarne.

To wcale nie jest to, czego chcę!
Po prostu chcę, aby serwer kompilacji zachowywał się w taki sam sposób jak moja kompilacja VS2012:.
Wygląda na to, że nie ma żadnego ustawienia w szablonie kompilacji, które pozwala mi to zmienić.

Czy ktoś może mi powiedzieć, w jaki sposób mogę sprawić, aby dane wyjściowe kompilacji były generowane przez binarki w oddzielnym folderze /bin dla każdego projektu?

(FYI, serwer kompilacji jest ustawiony zbudować plik .sln, nie jakiś dodatkowy skrypt MSBuild.)

Odpowiedz

2

Dzieje się tak dlatego MSBuild i TFSBuild to dwa różne produkty - na komputerze lokalnym MSBuild służy do budowania projektowanie.

Jedną z metod, którą użyłem do obejścia tego problemu, jest nieco bardziej gadatliwa i użyj kombinacji ProjectDir i ConfigurationName. Oto rzeczywisty przykład, gdzie jestem kopiowania niektóre pliki konfiguracyjne:

robocopy "$ (ProjectDir) bin \ $ (ConfigurationName)" "... folder docelowy ..." * .config

(uwaga, że ​​usunęliśmy ścieżkę docelową, to nie było istotne dla przykładu)

działa to niezależnie od tego, czy zespół jest kierowana do AnyCPU lub x86/64, ze względu na konwencji Microsoftu włączenia ukośnik jako część nazwy folderu.

+0

Chodzi o to, że TFSBuild nie tworzy folderu bin w $ (ProjectDir) w ogóle. Kompiluje się tylko do folderu obj i do skonsolidowanego folderu bin, który znajduje się poza $ (SolutionDir) i $ (ProjectDir). Jednak użyłem $ (TargetDir) na teraz, aby zlokalizować skonsolidowany folder bin. Dzięki za wkład. –

7

Programy TFS i Visual Studio używają msbuild do budowania rozwiązania, ale struktura folderów danych wyjściowych kompilacji jest inna. Powodem, dla którego dane wyjściowe nie mają tej samej struktury co VS, jest fakt, że szablon kompilacji TFS przesłania właściwość $ (OutDir), aby wskazać folder "binaria" w agencie budującym.

w TFS 2012/.NET 4.5 można kontrolować to zachowanie, przekazując argument msbuild w definicji kompilacji /p:GenerateProjectSpecificOutputFolder=true

Zobacz this blog uzyskać więcej informacji

+0

To jest prawie to, czego potrzebuję. Jednak moje zdarzenie PRE-BUILD jest nadal uszkodzone, wydaje się, że folder bin/Debug dotyczący konkretnych projektów jest "wypełniony" zbyt późno. Poprawiłem poprawnie zależności i działa na moim komputerze. Jakieś pomysły? –