【问题标题】:Update property in a script更新脚本中的属性
【发布时间】:2016-04-14 10:15:42
【问题描述】:

在我的 NAnt 脚本中,我有一个属性:

<property name="changed.assemblyinfo" value="false" unless="${property::exists('changed.assemblyinfo')}" />

可以使用-D 开关从命令行设置属性,如下所示,效果很好:

-D:changed.assemblyinfo=true

但是,我还希望能够根据脚本中的某些逻辑从脚本本身更新属性,即:

<property name="changed.assemblyinfo" value="true" />

但是,每次我这样做时都会收到错误:

只读属性“changed.assemblyinfo”不能被覆盖

如何在脚本中设置属性?

【问题讨论】:

    标签: nant


    【解决方案1】:

    当您在命令行中传递一个属性时,它被视为只读属性。来自the docs

    三。定义一个只读属性。这就像在命令行中传递参数一样。

    <property name="do_not_touch_ME" value="hammer" readonly="true" />
    

    这意味着您无法更新它。在您的情况下,如果您都需要能够从命令行提供它并根据逻辑对其进行更新,则意味着您需要在命令行上提供一个使用不同名称的默认值,例如:

    <property name="changed.assemblyinfo.default" value="false" unless="${property::exists('changed.assemblyinfo.default')}" />
    <property name="changed.assemblyinfo" value="${changed.assemblyinfo.default}" />
    

    所以现在changed.assemblyinfo 将包含changed.assemblyinfo.default 的默认值或在命令行中传入的值,而您可以正常覆盖它:

    <property name="changed.assemblyinfo" value="true" />
    

    【讨论】:

    • 感谢您的信息,非常简洁。
    猜你喜欢
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多