gpt4 book ai didi

xml - 如何根据属性的存在有条件地将参数传递给 NAnt exec 任务?

转载 作者:数据小太阳 更新时间:2023-10-29 01:45:14 25 4
gpt4 key购买 nike

我想从我的 NAnt 脚本中调用某个 EXE,并在属性存在的情况下将属性作为参数传递,否则不传递任何内容。

下面的代码似乎只适合这种情况,但它不起作用:

<exec program="notepad.exe">
<arg line="${file}" if="${property::exists('file')}" />
</exec>

它抛出 Property 'file' has not been set错误。看起来它在评估属性时忽略了条件。我希望它忽略整个 <arg>条件为 false 的元素.

如果我在这个 block 上方定义属性,它显然工作正常(即使属性为空)。如果是单个案例,可能值得采用一种解决方法,但我必须以相同的方式传递多个属性。此外,<if>不是 <exec> 下的有效元素...

如何实现?有什么想法吗?

最佳答案

我掏出an old thread at 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>

它可以(并且将会)被其他包含文件覆盖。

我还找到了another thread where the same question was asked ,并且参与 NAnt 开发的人员建议表明人们是否对修复此问题的补丁感兴趣 <arg>元素。据我所知,没有人表现出兴趣 :),因此行为没有改变。

我设法花了一点时间研究修复可能是什么,似乎它只是关于添加 ExpandProperties=falseTaskAttribute例如line <arg> 的属性(property)任务。 <property value="..."> 也是如此按预期工作的属性。不过,我没有尝试过 - 如果有一天我有更多时间,我会在这里发布更新。

关于xml - 如何根据属性的存在有条件地将参数传递给 NAnt exec 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12515734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com