2013-03-01 22 views
7

我有一个NAnt <exec>任务。我想要一个论据的存在是有条件的一些财产是true在NAnt <exec>,如何获得基于属性值的条件<arg>?

例如,我想让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. 

我怎样才能做到这一点?

回答

5

NAnt中的属性很棘手,因为它们没有类型,只是被认为是string。因此,这将是解决办法:

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

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

2

你需要把里面==true{},但你也可以跳过它:

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

一个true布尔表达式相较于true不会改变结果。