我使用的是0.85版本。我已经在文件中定义了一个属性,并且没有指定像'read only = true'。但是无论我在哪里尝试更改属性的值,我都会收到警告,说明属性不能被覆盖。
我尝试过设置readonly="false" overwrite="true"
。但似乎没有任何效果。任何帮助将不胜感激。
答案 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