我正在开发一个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构建文件中使用这个吗?
答案 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
...