繁体   English   中英

即使未标记为只读,也无法覆盖 Nant 属性

[英]Nant property cannot be overwritten eventhough not marked as readonly

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

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

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

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

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

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

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

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

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

你完全可以在 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM