Question

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?

Was it helpful?

Solution

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.

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top