2011-05-24 144 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 = ...