如果 属性 不为 null 或为空,则在 NAnt 可执行文件调用中包含参数

Include argument in NAnt executable call if property is not null or empty

对于构建脚本,我的部分过程是使用内部可执行文件部署文件。我们用一些参数调用它。

在我正在处理的应用程序中,我们需要添加一个参数。这不是追溯适用于我之前所做的任何其他事情的东西,所以我的想法是,如果相应的 属性 不为空或空,我只会包含新参数。

相关 NAnt 调用:

<property name="deploy.NewArg" value="" />
<echo message="deploy.NewArg = ${deploy.NewArg}" />

<exec program="C:\Deploy\MyAwesomeDeployProgram.exe">
    <arg value="AppTitle=${deploy.AppTitle}" />
    <arg value="Environment=${deploy.Environment}" />
    <!-- Here's the problem argument... -->
    <arg value="MyNewProperty=${deploy.NewArg}" if="${deploy.NewArg}" />
</exec>

我所拥有的不起作用的原因是因为新 <arg> 标记上的 if 子句 - deploy.NewArg 字符串不会转换为布尔语句。

问题: 我可以用什么方式对 <arg if> 参数执行 "Is Null or Empty" 检查?如上所述,如果 deploy.NewArg 什么都不是或空字符串,我希望添加 MyNewProperty=... 参数。

我检查了其他一些 Whosebug 问题以及 official NAnt arg tag documentation,但找不到如何做到这一点。

事实证明,我需要回到基础,并检查我的一些基础知识和功能。对 属性 进行 'is empty' 检查的方法如下:

<exec program="C:\Deploy\MyAwesomeDeployProgram.exe">
    <!-- Other args... -->
    <arg value="MyNewProperty=${deploy.NewArg}" if=${string::get-length(deploy.NewArg) > 0}" />
</exec>

对于尚未进行研究的人来说,if 仅适用于布尔值。也就是说,可以通过以下两种方式之一生成布尔值:显式 truefalse,或者使用表达式。表达式始终包含在 ${} 括号中。 string::get-length()的使用应该是显而易见的。

将它们放在一起,如果指定了参数,则只包含一个参数。