2013-04-16 3 views
0

Я хочу защитить от неправильного случая, помещенного внутри параметра в сценарий nant.NAnt Свойство в нижнем регистре

Я хочу взять значение х и преобразовать его в нижний регистр, я попытался с помощью

string::to-lower() 

, но это не сработало в надежде что кто-то пришел через это и имеет простое решение.

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

UPDATE

Я попытался предложение, выдвинутое Ян с кодом ниже этого до сих пор выводит капиталы поясню дальнейшее

У меня есть сценарий NANT, который имеет параметр, который может быть свойство передается в него, свойство проверяет наличие параметра и, если оно существует, оно использует его, если нет значения по умолчанию. Я хочу взять параметр в любой форме и передать его в нижний регистр, все еще проверяя его существование.

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

Я считаю, что это будет так, как вы думаете, что я должен сделать это Ян. Я проверил это со следующими аргументами командной строки.

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

Это производит выходной сигнал

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. 

любое решение будет высоко ценится

ответ

1

Когда вы говорите параметр, значит, вы имеете в виду его название или его значение? т.е. вы хотите, чтобы x был строчным, или test (я предполагаю, что последний)? Если у меня есть следующий сценарий: 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> 

И называть это так:

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

Я получаю следующий ответ:

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. 

Это то, что вы после этого?

UPDATE

Я думаю, что это то, что отключение вас:

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

(Из section 4 in the NAnt Properties documentation)

+0

последнее обновление было одним, спасибо – Deviland

0

Функция вы упомянули должны работать. Проверьте правильность написания синтаксиса:

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

Привет спасибо за ваш ответ, строка :: к ниже работает на Свою благодарность. Проблема, которую я, возможно, недостаточно объяснил, дается, что параметр x существует, преобразует его в нижний регистр. Вышеприведенный код представляет собой представление проблемы в ее простейшей форме. – Deviland

+0

Ну, не понимаю, что тогда не работает. Если вы хотите, чтобы 'x' содержал самую низкую версию самого себя, вы можете сделать что-то вроде этого:' ' –

Смежные вопросы