2011-05-25 8 views
5

Mam nieruchomość projekt C# wywoływane Wersja określona jakoStosując zmienną środowiskową Zespół Miasto zastąpić właściwość projektu

<Version Condition="$(Version)==''">1.2.3.4<Version> 

1.2.3.4 jest wartość domyślna.

Posiadam właściwość systemową z Team City, zwaną także Wersją, skonfigurowaną do nadpisania. Dlatego w oknie dialogowym uruchamiania niestandardowego w Team City mogę podać wartość dla wersji i ta wartość zostanie wykorzystana. To działa dobrze.

Jeśli jednak zostawiam pusty parametr w Team City, wartość domyślna jest nadal nadpisywana pustą (null?). Jeśli usuniemy parametr Team City, zostanie użyta wartość domyślna.

Czy warunek jest nieprawidłowy? Jak mogę ustawić właściwość Team City, aby była pusta, i tylko przesłonię, jeśli wprowadzę jakąś wartość?

Odpowiedz

6

Updated odpowiedź po komentarzu OP:

Od docs:

MSBuild pozwala na ustawienie właściwości z wiersza poleceń za pomocą przełącznika wiersza polecenia /nieruchomość lub/s. Wartości właściwości odebrane z linii poleceń zastępują wartości właściwości ustawione w pliku projektu i wartości właściwości dziedziczone ze zmiennych środowiskowych zmiennych.

więc można po prostu ustawić właściwość $ (VersionTC) w konfiguracji TeamCity i sprawdzić, czy że nieruchomość jest pusta lub nie i ustawić wersję

<Version>$(VersionTC)<Version> 
<Version Condition="'$(VersionTC)'==''">1.2.3.4<Version> 

(tak ustawić Version do VersionTC pierwszy. Następnie zobaczyć jeśli jest pusty i ustaw domyślny)

Spójrz na to blog post wyjaśniając to wszystko.


Spróbuj coś jak poniżej:

<Version Condition=" '$(Version)'=='' ">1.2.3.4<Version> 

zanotować ' ' (pojedyncze cudzysłowy) wokół $(Version)

+0

dziękuję, to nie pomogło – jbemt48

+0

@Spider M9 - to było tylko dla jasności. Czy nie zauważyłeś dodatkowego '' 'otaczającego $ (Version)? – manojlds

+0

@ jbemt48 - Zaktualizowałem moją odpowiedź – manojlds

4

drużyny Miasto jest prawdopodobnie nadal przekazując parametr w linii poleceń, tylko z pustą wartością , jako w,

lub coś si milar. Objawy, które widzisz, wynikają z tego, jak MSBuild radzi sobie z nadpisanymi właściwościami. Po określeniu w wierszu polecenia właściwość przyjmie tę wartość, niezależnie od tego, czy jest zadeklarowana w statycznym (globalnym w pliku, a nie w obiekcie docelowym) deklaracji grupy właściwości. Tak więc Twoja deklaracja Wersji z zaznaczonym Warunkiem dla pustego ciągu jest całkowicie pomijana.

Jednym ze sposobów obejścia tego jest przeniesienie swojej grupy PropertyGroup zawierającej deklarację $ (wersja), z jej stanem, do miejsca docelowego, w którym jest ono używane po raz pierwszy. MSBuild pozwoli nadpisać wartość właściwości wiersza poleceń z "dynamicznej" właściwości utworzonej w środowisku wykonawczym z obiektu docelowego.

Po uruchomieniu tej linii poleceń ...

> msbuild My.proj /t:Ver /p:Version="" 

... i mieć ten cel ...

<Target Name="Ver"> 
    <PropertyGroup> 
    <Version Condition="'$(Version)' == ''">1.2.3.4<Version> 
    </PropertyGroup> 
    <Message Text="Version: '$(Version)'" /> 
</Target> 

... dostaniesz Wersja pokazując 1.2.3.4, natomiast w grupie PropertyGroup poza celem zachowa pustą wartość.

+0

i nie będzie działał nawet ty, jeśli przejdziesz do celu, chyba że użyjesz . Zobacz moją zaktualizowaną odpowiedź – manojlds

+0

Przeniesienie grupy PropertyGroup do elementu docelowego to składnia odpowiadająca 4,0 odpowiadająca nowemu (prawie) przestarzałemu zadaniu CreateProperty. I to zadziała, spróbuj! –

Powiązane problemy