2010-11-10 4 views
0

Je travaille sur un projet de construction NANT pour construire un projet VS. L'un des fichier de construction a une définition de propriété comme ceci:Convertir un nom long en nom court dans NANT?

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

Cette valeur de la propriété a été utilisée dans de nombreux autres endroits. Par exemple:

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

Ici, je dois utiliser < ligne arg = ... > au lieu de < valeur arg = ... > est de passer 2 spécifié arguments à text.exe. Lorsque j'ai construit ce projet NANT sur la machine d'un autre développeur, j'ai eu un échec de construction. Enfin, j'ai découvert que $ {App.dir} sur la machine de ce développeur est un chemin en forme longue et il y a un espace dans le chemin. Par conséquent, les arguments de text.exe étaient en réalité 3 ou plus.

Je ne sais pas s'il y a un moyen de convertir le chemin $ {} pour App.dir nom court sans espace:

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

où ???? est quelque chose à convertir "$ {répertoire :: get-current-directory()} \ Source \ App" en un nom de chemin dans un format court. Y'a-t'il un quelconque moyen d'y arriver? J'utilise NANT dans Windows XP. Dans Unix/Cgywin, il y a one function d'obtenir le nom dos:

cygpath::get-dos-path 

Puis-je utiliser celui-ci dans mon dossier de construction de NANT?

Répondre

1

utilisation < valeur arg = "" >, du NANT docs:

valeur - Un argument de ligne de commande unique; peut contenir des caractères d'espace.

+0

quelle que soit les valeurs du arg seront transmises à mon regsgen à courir.Les espaces dans l'argument ont causé le problème. –

+0

si vous utilisez la valeur sera automatiquement indiquée si nécessaire. Comme alternative, vous pouvez utiliser . –

+0

L'attribut value prendra la valeur entière en UN seul paramètre. S'il y a de l'espace dans la valeur, il ajoutera des guillemets autour de la valeur. Ma question est de passer la valeur en argument à mon programme exec exe. Si la valeur de $ {app.dir} fait partie de ou , les arguments sont mal interprétés. –

0

Je pense que j'ai trouvé deux façons de résoudre le problème. Au lieu de convertir le chemin en chemin DOS (nom 8.3), je peux utiliser des guillemets autour de mes arguments. La deuxième méthode est celle que ovado recommandé d'utiliser < arg valeur = .../> pour une seule valeur d'argument. Voici mon exemple de test. Tous les fichiers de test sont dans mon dossier C: \ Test. Tout d'abord, j'ai créé une chauve-souris de test:

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

Ensuite, j'ai créé un fichier de compilation de test (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> 

Ici je" pour fermer mon premier argument en < arg = » "..." '.../>. Notez que j'ai utilisé un guillemet simple pour mon attribut ligne.

De cette façon, je cours ma construction par NANT.EXE. Je suis le résultat que je m'y attendais:

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

J'ai obtenu le même résultat avec l'alternative Test2,

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