In NAnt <exec>, how to have a conditional <arg> based on property value?

StackOverflow https://stackoverflow.com/questions/15167620

  •  16-03-2022
  •  | 
  •  

문제

I've got an NAnt <exec> task. I want one argument presence to be conditional to some property being true.

For example, I want the -c command line argument of psExec to be conditional. It should be outputted only if ${pExec.copyprog == 'true'}.

The following does not work:

<property name="psExec.copyprog" value="false" />
...

<exec program="${psExec.path}" failonerror="false">
   ...
   <arg line="-c" if="${psExec.copyprog}==true" />
</exec>

It yields the following error:

'false==true' is not a valid value for attribute 'if' of <arg ... />.
    Cannot resolve 'false==true' to boolean value.
       String was not recognized as a valid Boolean.

How can I achieve this?

도움이 되었습니까?

해결책

Properties in NAnt are tricky since they don't have a type and simply are considered as of type string. So this would be the solution:

<exec program="${psExec.path}" failonerror="false">
  <!-- ... -->
  <arg line="-c" if="${bool::parse(psExec.copyprog)}" />
</exec>

Update: Mea culpa! I was wrong. if="${psExec.copyprog}" does also work. So there is some sort of property typing.

다른 팁

You'd need to put ==true inside {}, but you can also just skip it:

<arg line="-c" if="${psExec.copyprog}" />  

Comparing a true boolean expression to true does not change the result.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top