0

我想防止在 nant 脚本的参数中放置不正确的大小写。

我想取 x 的值并将其转换为小写,我尝试使用

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>

更新

我尝试了 Yan 提出的建议,下面的代码仍然输出大写,我将进一步解释

我有一个 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.

任何解决方案将不胜感激

4

2 回答 2

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.

这就是你所追求的吗?

更新

我认为这是让你绊倒的原因:

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

(来自NAnt 属性文档中的第 4 节

于 2013-04-17T02:17:47.133 回答
0

您提到的功能应该可以工作。看看你的语法拼写是否正确:

<echo message="${string::to-lower(x)}" />
于 2013-04-16T08:06:23.903 回答