Преобразовать длинное имя в короткое имя в NANT? - PullRequest
0 голосов
/ 11 ноября 2010

Я работаю над проектом сборки 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"/>

Здесь мне нужно использовать вместо для передачи указанных 2 аргументов в text.exe.

когда я собираю этот проект NANT на компьютере другого разработчика, я получаю ошибку сборки. Наконец, я обнаружил, что $ {App.dir} на машине этого разработчика - это путь в длинной форме, и в нем есть пробел. В результате аргументов text.exe на самом деле было 3 или более.

Я не уверен, есть ли способ преобразовать путь $ {App.dir} в короткое имя без пробелов:

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

где ???? это что-то, чтобы преобразовать "$ {directory :: get-current-directory ()} \ Source \ App" в краткое имя пути. Есть ли способ сделать это?

Я использую NANT в Windows XP. В Unix / Cgywin есть одна функция для получения имени душ:

cygpath::get-dos-path

Могу ли я использовать это в моем файле сборки NANT?

Ответы [ 2 ]

1 голос
/ 11 ноября 2010

Используйте из документов NANT :

значение - один аргумент командной строки; может содержать пробелы

0 голосов
/ 13 ноября 2010

Я думаю, что нашел два способа решения проблемы. Вместо преобразования пути в путь 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

Затем я создал тестовый файл сборки (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>

Здесь я использовал ", чтобы закрыть свой первый аргумент в . Обратите внимание, что я использовал одинарную кавычку для своего атрибута line .

Таким образом, я запускаю свою сборку 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
...
...