在我的NAnt脚本中,我有一个属性:
<property name="changed.assemblyinfo" value="false" unless="${property::exists('changed.assemblyinfo')}" />
可以使用-D
开关从命令行设置属性,如下所示,该工作正常:
-D:changed.assemblyinfo=true
但是,我还希望能够根据脚本中的某些逻辑从脚本本身更新属性,即:
<property name="changed.assemblyinfo" value="true" />
但是,每次我这样做都会收到错误:
只读属性&#34; changed.assemblyinfo&#34;不能被覆盖
如何在脚本中设置属性?
答案 0 :(得分:1)
在命令行中传递属性时,它将被视为只读属性。来自the docs:
III。定义只读属性。这就像在命令行中传递参数一样。
<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" />