2011-05-24 52 views
0

我正在使用nant 0.85版本。我已经在一个文件中定义了一个属性,并没有指定类似于'只读= true'的属性,但是当我尝试更改属性的值时,我收到警告说属性不能被覆盖。已经尝试设置readonly="false" overwrite="true"。但似乎没有任何工作。任何帮助,将不胜感激。Nant属性不能被覆盖eventhough没有标记为只读

+0

显示一些示例代码,你怎么也覆盖等 – manojlds 2011-05-24 06:18:27

+0

,尝试南特0.90 0.91_alpha,您使用的版本于2006年发布! – skolima 2011-05-24 06:59:32

+0

我没有任何命令行属性。我从Cruisecontrol.net运行这个nant构建。这些属性位于一个文件中,并使用include标签包含这些属性。尽管我没有将这些属性指定为只读,但当它们包含在构建文件中时,它将以只读方式包含在内。然后,我尝试将包含文件的内容移到相同的nant构建文件中。但不知道它在哪里设置属性:(。 – priya 2011-05-26 05:12:42

回答

9

需要更多的细节,特别是如果你在命令行中的“属性的值更改”。

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

这不是相反的方式,这会导致一些混淆,人们认为尽管没有readonly设置为true等仍然说不能被覆盖。

所以试着看看你设置的属性是否实际上使用你想要的值,如果你从命令行覆盖。

3

你可以在NAnt 0.85完全做到这一点。比方说,例如,您有一个名称为“myvalue”的属性,您希望能够从命令行传入该属性。你会先在恶性脚本定义属性是这样的:

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

当你调用南特你只需要使用-D参数在新的值传递这样的:

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

而且新的“16”值会在生成脚本的认可,你可以通过简单地呼应这样的值测试:

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

欲了解更多信息,可以阅读文档,并期待在EXA mple “IV”:

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

10

使用除非属性,它的工作原理。

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

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