Forum Delphi.cz

Co se jinam nevešlo => Obecné => Téma založeno: pepak 04-08-2017, 11:55:42

Název: MSBuild a podmínka na obsah řetězce
Přispěvatel: pepak 04-08-2017, 11:55:42
Ahoj,

dokázal by mi prosím někdo poradit s MSBuild? Chci v <PropertyGroup> udělat podmínku, že proměnná obsahuje podřetězec. Podle dokumentací, které jsem našel, by mělo fungovat něco jako:

Kód: [Vybrat]
<PropertyGroup Condition="$(DCC_Defines.Contains('xxx'))">
  ... cokoliv ...
</PropertyGroup>

Mě to bohužel nefunguje (MSBuild v3.5): Ve variantě výše dostávám chybu "MSB4092: An unexpected token ")" was found at character position 29 in condition "$(DCC_Define.Contains('xxx'))". A netuším, co se mi tím MSBuild snaží říct, protože ta závorka tam podle mě být musí. Asi tak nejdál se dostanu s podmínkou:

Kód: [Vybrat]
<PropertyGroup Condition="$(DCC_Define.Contains('xxx')==''">
  ... cokoliv ...
</PropertyGroup>

která má ale z mého pohledu dva hrubé nedostatky:

1) Jsou tam nevyvážené závorky, což mi připadá, že musí být špatně, a

2) netuším, jak z toho poznat, jestli podmínka splněna byla nebo ne, protože ten prázdný řetězec jako výsledek dostanu pro jakékoliv hledané řetězce, existující i neexistující.

Kde dělám chybu?
Název: Re:MSBuild a podmínka na obsah řetězce
Přispěvatel: pf1957 04-08-2017, 12:19:54
Mě to bohužel nefunguje (MSBuild v3.5): Ve variantě výše dostávám chybu "MSB4092: An unexpected token ")" was found at character position 29 in condition "$(DCC_Define.Contains('xxx'))". A netuším, co se mi tím MSBuild snaží říct, protože ta závorka tam podle mě být musí. Asi tak nejdál se dostanu s podmínkou:
Tak Contains jsem jeste nepotreboval, ale rekl bych, ze z toho, co ti pise za chybu a ze Contains() je metoda nejakeho stringu a DCC_Define ma byt pravdepodobne nejaka promenna, tak bych tu syntaxi videl:
Kód: [Vybrat]
$(DCC_Define).Contains('xxx')
Název: Re:MSBuild a podmínka na obsah řetězce
Přispěvatel: pepak 04-08-2017, 12:47:35
To já bych viděl taky, taky jsem ji párkrát zkoušel, ale nefunguje - stěžuje si na MSB4092: An unexpected token "." was found at character position ... Totéž ve variantě, kdy kolem $(DCC_Define) jsou apostrofy.
Název: Re:MSBuild a podmínka na obsah řetězce
Přispěvatel: pf1957 04-08-2017, 13:43:58
To já bych viděl taky, taky jsem ji párkrát zkoušel, ale nefunguje - stěžuje si na MSB4092: An unexpected token "." was found at character position ... Totéž ve variantě, kdy kolem $(DCC_Define) jsou apostrofy.
Tak asi ne, podle toho co lze dohledat: jediny rozdil oproti tomu co mas, tak uvadeji obracene apostrofy https://blogs.msdn.microsoft.com/msbuild/2010/04/02/msbuild-property-functions/ (https://blogs.msdn.microsoft.com/msbuild/2010/04/02/msbuild-property-functions/)
Název: Re:MSBuild a podmínka na obsah řetězce
Přispěvatel: pf1957 04-08-2017, 13:44:45
Jo a jeste ze je to od MSBuild 4...
Název: Re:MSBuild a podmínka na obsah řetězce
Přispěvatel: pepak 04-08-2017, 14:08:59
Hmm, tak to mám asi s Delphami docela smůlu :-(
Název: Re:MSBuild a podmínka na obsah řetězce
Přispěvatel: pf1957 04-08-2017, 14:14:51
Hmm, tak to mám asi s Delphami docela smůlu :-(
Ja s tim delam jen v dotShitu
Název: Re:MSBuild a podmínka na obsah řetězce
Přispěvatel: pf1957 04-08-2017, 14:17:59
Hmm, tak to mám asi s Delphami docela smůlu :-(
Tohle jsi videl: https://stackoverflow.com/questions/3289538/is-there-any-msbuild-task-to-check-if-a-string-contains-another-string-similar (https://stackoverflow.com/questions/3289538/is-there-any-msbuild-task-to-check-if-a-string-contains-another-string-similar)?. Tam pise, ze na to ve verzich 3.x lze pouzit  Tigris MsBuild Tasks a regex. Ale jakou verzi MS Buildu pouziva Delphi nebo jestli jim s tim normalne bezi build tasky, to netusim