2010-11-10 59 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 
...