2010-11-10 61 views
0

我正在開發一個NANT構建項目來構建一個VS項目。其中一個構建文件具有如下屬性定義:在南特轉換長名稱爲短名稱?

<property name="App.dir" 
    value ="${directory::get-current-directory()}\Source\App"/> 

此屬性值已在許多其他地方使用。例如:

<exec program=".\test.exe" workingdir="."> 
    <arg line="${App.dir}\project1\resources\res1.resx /arg2"/> 

在這裏,我需要使用< ARG線= ...的>代替< ARG值= ... >是通過指定的2個參數,以text.exe。

當我在另一個開發人員的機器上構建這個NANT項目時,出現構建失敗。最後,我發現該開發人員機器上的$ {App.dir}是一個長格式的路徑,路徑中有一個空格。因此,text.exe的參數實際上是3個或更多。

我不知道是否有任何方式向$ {} App.dir路徑短名稱轉換不帶空格:

<property name="App.dir" value ="????"/> 

地方????是將「$ {directory :: get-current-directory()} \ Source \ App」轉換爲短格式的路徑名。有沒有辦法做到這一點?

我在Windows XP中使用NANT。在Unix系統/ Cgywin,有one function讓DOS名稱:

cygpath::get-dos-path 

我可以用這一個在我的NANT build文件?

回答

1

使用< ARG值= 「」 >,從NANT docs

值 - 單個命令行參數;可以包含空格字符。

+0

無論在ARG值將被傳遞到我的regsgen運行。arg中的空格引起了問題。 – 2010-11-10 22:08:22

+0

如果您使用<參數值=「...」>該值將自動引用,如果需要的話。作爲替代方案,您可以使用。 – 2010-11-11 14:59:19

+0

value屬性將把整個值作爲一個參數。如果值中有空格,則會在值附近添加引號。我的問題是將價值作爲參數傳遞給我的EXE exe程序。如果$ {app.dir}的值是中的一部分,則參數被解釋爲錯誤。 – 2010-11-12 17:33:58

0

我認爲我找到了兩種方法來解決這個問題。不用將路徑轉換爲DOS路徑(8.3名稱),我可以在我的參數周圍使用引號。第二種方法是ovado推薦使用<參數值= .../>作爲單個參數值。這是我的測試例子。所有的測試文件都在我的C:\ Test文件夾中。首先,我創建了一個測試蝙蝠:

@REM This is the content of Test.bat file. 
@echo COMMAND PARAMETERS: %* 
@echo FIRST PARAMETER: %1 
@echo SECOND PARAMETER: %2 
dir %1 

然後,我創建了 「我用

<project> 
    <target name="Test" description="Test with one line" failonerror="true"> 
    <property name="App.dir" value ="C:\Program Files"/> 
    <exec program="test.bat" workingdir="."> 
     <arg line='"${App.dir}\Microsoft*.*" ${App.dir}\test2 /test3' /> 
    </exec> 
    </target> 
    <target name="Test2" description="Test2 with values" failonerror="true"> 
    <property name="App.dir" value ="C:\Program Files"/> 
    <exec program="test.bat" workingdir="."> 
     <arg value="${App.dir}\Microsoft*.*" /> 
     <arg value="${App.dir}\test2" /> 
     <arg value="/test3" /> 
    </exec> 
    </target> 
</project> 

這裏」 關閉我的第一個論點< ARG =」測試構建文件(Test.Build) 「...」'.../>。請注意,我對我的屬性使用了單引號。

這樣,我運行我的版本NANT.EXE。我得到的結果如我所料:

C:\Test>NANT.exe -buildfile:test.build Test 

Test: 
    [exec] COMMAND PARAMETERS: "C:\Program Files\Microsoft*.*" C:\Program Files\test2 /test3 
    [exec] FIRST PARAMETER: "C:\Program Files\Microsoft*.*" 
    [exec] SECOND PARAMETER: C:\Program 
    [exec] C:\Test\>dir "C:\Program Files\Microsoft*.*" 
    [exec] Volume in drive C has... 
    .... 

我得到了替代的Test2的相同的結果,

C:\Test>NANT.exe -buildfile:test.build Test2 
...