在NANT中将长名称转换为短名称?

时间:2010-11-10 21:30:41

标签: nant

我正在开发一个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"/>

这里我需要使用&lt; arg line = ...&gt;而不是&lt; arg value = ...&gt;是将指定的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构建文件中使用这个吗?

2 个答案:

答案 0 :(得分:1)

使用&lt; arg value =“”&gt;,来自NANT docs

value - 单个命令行参数;可以包含空格字符。

答案 1 :(得分:0)

我认为我找到了两种解决问题的方法。我可以在我的参数周围使用引号,而不是将路径转换为DOS路径(8.3名称)。第二种方法是ovado建议使用&lt; arg value = ... /&gt;的方法。对于单个参数值。这是我的测试示例。所有测试文件都在我的 C:\ Test 文件夹中。首先,我创建了一个测试蝙蝠:

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

然后我创建了一个测试构建文件(Test.Build)“

<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>

在这里,我用“关闭&lt; arg ='”......“'... /&gt; 中的第一个参数。请注意,我使用单引号作为我的属性线

通过这种方式,我通过 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
...