2013-04-16 6 views
0

Je souhaite protéger contre un cas incorrect placé dans un paramètre dans un script nant.NAnt Propriété en minuscules

Je veux prendre la valeur de x et de le convertir en minuscules, j'ai essayé d'utiliser

string::to-lower() 

mais ça n'a pas marché espérant que quelqu'un est venu à travers cela et a une solution simple.

<?xml version="1.0" encoding="utf-8"?> 
    <project name="test" Default="test" value="net-4.0" > 

    <property name="x" value="default" unless="${property::exists('x')}"/> 

    <target name="test"> 
     <echo message="${x}" /> 
    </target> 
    </project> 

MISE À JOUR

J'ai essayé la suggestion faite par Yan avec le code ci-dessous cette commande affiche encore capitales je vous expliquerai plus

J'ai un script nante qui a un paramètre qui peut être Passé dedans, une propriété vérifie l'existence du paramètre et si elle existe il l'utilise, sinon il y a une valeur par défaut. Je veux prendre le paramètre sous n'importe quelle forme et le convertir en minuscule tout en vérifiant son existence.

<?xml version="1.0" encoding="utf-8"?> 

<property overwrite="true" name="x" value="default" unless="${property::exists('x')}"/> 
<property overwrite="true" name="x" value="${string::to-lower(x)}" /> 

<target name="test"> 
    <echo message="${x}" /> 
</target> 
</project> 

Je crois que ce soit la façon dont vous pensez que je devrais le faire Yan. J'ai testé cela avec les arguments de ligne de commande suivants.

nant -buildfile:nant.build test -D:x=TEST 

Cela produit la sortie

Target framework: Microsoft .NET Framework 4.0 
Target(s) specified: test 

[property] Read-only property "x" cannot be overwritten. 

test: 

[echo] TEST 

BUILD SUCCEEDED - 0 non-fatal error(s), 1 warning(s) 

Total time: 0.1 seconds. 

toute solution serait très appréciée

Répondre

1

Quand vous dites paramètre, vous voulez dire son nom ou sa valeur? c'est-à-dire, voulez-vous vous assurer que x est en minuscules, ou test (je suppose que ce dernier)? Si je le script suivant Nant:

<?xml version="1.0" encoding="utf-8"?> 
<project name="test" Default="test" value="net-4.0" > 

    <property overwrite="false" name="x" value="default"/> 
    <property overwrite="false" name="x_internal" value="${string::to-lower(x)}" /> 

    <target name="test"> 
     <echo message="${x_internal}" /> 
    </target> 
</project> 

Et appelle comme ceci:

nant.exe -buildfile:nant.build test -D:x=TESTx 
nant.exe -buildfile:nant.build test -D:X=TESTX 

Je reçois la réponse suivante:

Target framework: Microsoft .NET Framework 4.0 
Target(s) specified: test 

test: 

    [echo] testx 

BUILD SUCCEEDED 
Total time: 0 seconds. 

Target framework: Microsoft .NET Framework 4.0 
Target(s) specified: test 

test: 

    [echo] default 

BUILD SUCCEEDED 
Total time: 0 seconds. 

Est-ce que vous êtes après?

MISE À JOUR

Je pense que c'est ce que vous trébucher:

Note: properties set on the command-line are always read-only. 

(De section 4 in the NAnt Properties documentation)

+0

la dernière mise à jour était celle, merci – Deviland

0

La fonction que vous avez mentionné devrait fonctionner. Voyez si vous avez orthographié la syntaxe correctement:

<echo message="${string::to-lower(x)}" /> 
+0

Salut, merci pour votre réponse, string :: à bas ne fonctionne sur ses propres remerciements. Le problème que je n'ai peut-être pas bien expliqué, est donné que le paramètre x existe pour le convertir en minuscule. Le code ci-dessus est une représentation du problème sous sa forme la plus simple. – Deviland

+0

Eh bien, ne comprends pas ce qui ne fonctionne pas alors. Si vous voulez que 'x' contienne la version en minuscule de lui-même, vous pouvez faire quelque chose comme ceci:' ' –