在NAnt <exec>中,如何根据属性值获得条件<arg>?</arg> </exec>

时间:2013-03-01 22:04:12

标签: nant

我有一个NAnt <exec>任务。我希望一个参数存在是以某个属性true为条件的。

例如,我希望psExec的-c命令行参数是有条件的。它应该仅在${pExec.copyprog == 'true'}时输出。

以下不起作用:

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

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

它会产生以下错误:

'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.

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:6)

NAnt中的属性很棘手,因为它们没有类型,只是被认为是类型string。所以这就是解决方案:

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

更新: Mea culpa!我错了。 if="${psExec.copyprog}"也有效。所以有一些属性输入。

答案 1 :(得分:3)

您需要将==true放在{}内,但您也可以跳过它:

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

true布尔表达式与true进行比较不会改变结果。