2013-02-05 11 views
8

Korzystamy z usługi Team Foundation Service zamiast lokalnego TFS. Nasze rozwiązanie zostało utworzone na Visual Studio 2012. Mój problem polega na tym, że chcemy, aby wszystkie zestawy miały ten sam numer wersji (ta część jest już rozwiązana za pomocą pliku CommonAssemblyInfo.cs, który jest połączony ze wszystkimi projektami). Problem, z którym teraz się borykam, polega na tym, że potrzebujemy numeru zestawu zmian tfs na ostatniej cyfrze wersji zespołu (np. 1.0.0.4711, gdzie 4711 to numer zestawu zmian). Znalazłem kilka przykładów, ale żaden z nich nie działał dla mnie. I tak, szczególnie często szukałem tutaj na stackoverflow.Numer zestawu zmian na informacje o wersji z hostowanym TFS

Muszę też przyznać, że nigdy nie spojrzał w skryptach MSBuild ...

Czy ktoś proszę dać mi wskazówkę, w jaki sposób to osiągnąć? Czy można na przykład użyć rozszerzenia MSBuild w pakiecie Team Foundation Service (a nie w lokalnym systemie TFS) i jak to zrobić?

Jak zawsze, czas jest moim najgorszym wrogiem ...

Odpowiedz

2

pamiętać, że od 2010 r Tfs zatrudnia Windows Workflow do budowania pakietu workflow wywołuje msbuild do kompilacji tylko projekty - podczas jego możliwości przekazać changeset ten sposób msbuild to raczej więcej przeskoków. Po transakcji z problemem, jednak połączone rozwiązanie jest bardziej skomplikowane, że potrzebne: Can assembly version been automatically updated with each TFS 2010 Build?

Jest to jedna z najlepszych serii tutoriali w zwyczaju budowania działań, autor jest na stosie, a ja wierzę, jeden specificly o wersjonowanie http://www.ewaldhofman.nl/post/2010/05/13/Customize-Team-Build-2010-e28093-Part-5-Increase-AssemblyVersion.aspx

W skrócie trzeba aktywności niestandardowy uruchomić przed kompilacją na plikach źródłowych, znaleźć wszystkie pliki CommonAssemblyInfo.cs, karmić tę listę na swojej działalności niestandardowego, modyfikuje wartości wewnątrz przeszedł wartości pełny numer wersji lub tylko zestaw zmian i opcjonalne sprawdzenie zmiany (prawdopodobnie nie od tego czasu, gdy Twój zestaw zmian nie będzie zsynchronizowany).

Możesz również rzucić okiem na https://tfsbuildextensions.codeplex.com/ zestaw działań, w którym występuje aktywność TfsVersion, przynajmniej podadzą przykłady.

Potrzebna do tego funkcjonalność powinna być dostępna za pośrednictwem Eksplorera zespołu i kontroli źródła - Zespoły działań niestandardowych i szablony kompilacji zwykle znajdują się w folderze w katalogu głównym projektu zespołu - położenie tego folderu jest zdefiniowane dla kontrolera budowy, można to zmienić poprzez sekcję budowania zespołu odkrywców.

changeset dostępna jest od wartości BuildDetail.SourceGetVersion, nie wiem, czy to było ustalone/zmieniła w 2012 roku jednak było 2 problemy dotyczące tej wartości w 2010

  1. Jej robi szacunek getVersion zastąpić w domyślnym szablonie build - ty będzie manualy trzeba aktualizować, jeśli jest stosowany przesłanianie
  2. po uruchomieniu najnowszej wersji (bez nadpisanie) będzie się ostatni numer changeset od TFS - w zależności od swoich oddziałów nie może być taka sama jak „ostatni” changeset dla branży produkcji . Musisz albo żyć z tym, dostarczyć przesłonięcia dla każdej kompilacji lub działania narzędzia, które sprawdza historię oddziału dla ostatniej wartości zestawu zmian i zastępuje ją ponownie.

Należy zauważyć, że getVersion powinien być w stanie przyjąć żadnego sourcespec wersji - changeset, datę, etykiety itd. I miałaś bawił to wystarczy, aby zapewnić więcej szczegółów do ciebie.

+0

Wielkie dzięki, istnieją bardzo przydatne linki w swoim poście! – AlexK

+0

Jednak nadal nie znalazłem sposobu na uzyskanie numeru zestawu zmian ... Znalazłem kilka postów wykorzystujących tag , który nie działa w VS2012 ... To kara za pracę z najnowszą technologią. – AlexK

+0

Edytowany w odniesieniu do zestawu zmian nr – drk

0

Użyłem Wintellect's solution - Tylko MSBuild, bez magii TFS. Dodałem również do generowanego automatycznie pliku CSharp:
[assembly:AssemblyInformationalVersion("$(BuildNumber)")]
Otrzymałem numer kompilacji TFS.

+3

Należy jednak pamiętać, że klasa BuildNumber nie jest zestawem zmian - może nie zawierać w ogóle zestawu zmian - nie jest to implementacja domyślna. – drk

0

Colin Dembovsky napisał great overview of doing version embedding using the new pre-build script setting in TFS 2013 build definitions.

Numer zestawu zmian jest łatwo dostępny w ramach procesu wstępnego kompilowania w zmiennej środowiskowej TF_BUILD_SOURCEGETVERSION. Byłem w stanie użyć tego do osadzenia wartości zestawu zmian w naszych plikach binarnych za pomocą skryptu opartego na powyższej pracy Dembowskiego. (Użyłem Perla, a nie PowerShell, więc prawdopodobnie nie chcesz tego widzieć ;-)

To podejście nie wymaga żadnych zmian w obiegu budowy, co jest dla mnie wielką wygraną.

+0

Jak wygląda Twoja wersja skryptu z numerem zestawu zmian? –