Propiedad NAnt a minúsculas

Quiero protegerme contra la colocación incorrecta de mayúsculas y minúsculas dentro de un parámetro en un script nant.

Quiero tomar el valor de x y convertirlo a minúsculas, intenté usar

string::to-lower()

pero eso no funcionó con la esperanza de que alguien se haya encontrado con esto y tenga una solución 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>

ACTUALIZACIÓN

Intenté la sugerencia presentada por Yan con el código a continuación, esto aún genera mayúsculas. Lo explicaré con más detalle.

Tengo un script nant que tiene un parámetro que se le puede pasar, una propiedad verifica la existencia del parámetro y, si existe, lo usa, si no, hay un valor predeterminado. Quiero tomar el parámetro en cualquier forma que se le dé y convertirlo a minúsculas mientras sigo comprobando su existencia.

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

Creo que esta es la forma en que crees que debería hacerlo, Yan. He probado esto con los siguientes argumentos de línea de comando.

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

Esto produce la salida

 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.

cualquier solución sería muy apreciada

preguntado el 16 de abril de 13 a las 08:04

2 Respuestas

Cuando dices parámetro, ¿te refieres a su nombre o su valor? es decir, ¿quieres asegurarte x es minúscula, o test (Supongo que esto último)? Si tengo el siguiente script 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>

Y llámalo así:

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

Recibo la siguiente respuesta:

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.

¿Es esto lo que buscas?

ACTUALIZACIÓN

Creo que esto es lo que te está haciendo tropezar:

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

(De sección 4 en la documentación de propiedades de NAnt)

Respondido 17 Abr '13, 03:04

La función que mencionas debería funcionar. Vea si escribió la sintaxis correctamente:

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

Respondido 16 Abr '13, 09:04

Hola, gracias por tu respuesta, string::to-lower funciona por sí solo, gracias. El problema que quizás no haya explicado lo suficientemente bien es que el parámetro x existe, conviértalo a minúsculas. El código anterior es una representación del problema en su forma más simple. - tierra del diablo

Bueno, no entiendo lo que no funciona entonces. Si tu quieres x para contener la versión en minúsculas de sí mismo, puede hacer algo como esto: <property name="x" value="${string::to-lower(x)}" /> - Yan Sklyarenko

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.