即使未标记为只读,也不能覆盖Nant属性

时间:2011-05-24 05:50:45

标签: nant

我使用的是0.85版本。我已经在文件中定义了一个属性,并且没有指定像'read only = true'。但是无论我在哪里尝试更改属性的值,我都会收到警告,说明属性不能被覆盖。

我尝试过设置readonly="false" overwrite="true"。但似乎没有任何效果。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:11)

使用除非属性,它有效。

<property name="msbuild.path" value="CONFIGURABLE" unless="${property::exists('msbuild.path')}" />

然后像往常一样nant -D:msbuild.path = ...

答案 1 :(得分:10)

需要更多详细信息,特别是如果您从命令行“更改属性的值”。

我看到的一件事引起了一些混乱,当从命令行(-D:prop=value)覆盖属性时,如果在文件中定义了相同的属性(<property name="prop" value="value"/>),它将会说只读属性不能被覆盖,因为从命令行设置的属性是只读的,并且它不能被文件中定义的属性覆盖。

这不是另一种方式,这导致一些混乱,人们认为尽管没有readonly设置为真等等仍然说不能被覆盖。

因此,如果要从命令行覆盖,请尝试查看您设置的属性是否实际使用了您想要的值。

答案 2 :(得分:3)

你可以在NAnt 0.85中完全做到这一点。例如,假设您有一个名为“myvalue”的属性,您希望能够从命令行传入该属性。您首先要在NAnt脚本中定义属性,如下所示:

<property name="myvalue" value="0" overwrite="false" />

当您调用NAnt时,您只需要使用-D参数传递新值,如下所示:

nant.exe buildfile:myfile.build -logfile:mylog.log -D:myvalue=16

您的新值“16”将在您的构建脚本中被识别,您可以通过简单地回显这样的值来测试:

<echo message="myvalue: ${myvalue}" />

有关详细信息,您可以阅读文档并查看示例“iv”:

http://nant.sourceforge.net/release/0.85/help/tasks/property.html