我希望防止将错误的案例放在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.
任何解决方案都会非常感激
答案 0 :(得分: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.
答案 1 :(得分:0)
您提到的功能应该有效。看看你拼写的语法是否正确:
<echo message="${string::to-lower(x)}" />