我在 NAnt mailing list 找到了一个旧线程,它实际上为解决方法提供了最佳建议(对我而言)。<property>
它基于任务按预期工作的事实。解决方法引入了一个额外的属性来设置,具体取决于是否定义了原始属性。
像这样:
<target name="example">
<property name="arg.value" value="${arg}" if="${property::exists('arg')}" />
<property name="arg.value" value="" unless="${property::exists('arg')}" />
<exec program="program.exe">
<arg value="${arg.value}" />
</exec>
</target>
在我的情况下,总是使用默认值设置属性更容易,甚至不引入额外的属性 - 只需将原始属性传递给<arg/>
:
<target name="example">
<property name="arg.value" value="default value" overwrite="false" />
<exec program="program.exe">
<arg value="${arg.value}" />
</exec>
</target>
它可以(并且将)在其他包含文件中被覆盖。
我还发现另一个线程问了同样的问题,一位参与 NAnt 开发的人建议表明人们是否对修复这个问题的补丁感兴趣<arg>
。据我所知,没有人表现出兴趣:),因此行为没有改变。
我设法花一点时间调查修复可能是什么,似乎它只是添加ExpandProperties=false
到TaskAttribute
例如任务的line
属性<arg>
。对于<property value="...">
按预期工作的属性也是如此。不过,我没有尝试过-如果这些天我有更多时间,我会在这里发布更新。