nant:扩展字符串中的属性

时间:2009-02-27 13:13:04

标签: nant

要点:

如果属性buildmode包含debug,如何将值为“download \ $ {bulidmode} \ project \ setup.msi”的属性展开为“download \ Debug \ project \ _setset.msi”,以便我可以将其用作file =“”部分<复制>

详情:

我有一点要求能够在nant中扩展字符串中的属性。

例如,我有一个目标是将文件A复制到B. A和B都来自一个简单的两个字段CSV文件,我正在使用

进行迭代
<foreach item="Line" in="filelist.csv" delim="," property="source.file,target.file">

    <property name="sourcefile" value="${path::combine(source.dir,source)}" /> 
    <property name="targetfile" value="${path::combine(download.dir,destination)}" />
    <echo message="Copy ${sourcefile} to ${targetfile}" />

    <copy file="${sourcefile" tofile="${destination}" />

</foreach>

并且filelist.csv将是

build\manifest.xml 
solutiondirectory\setup-proj-directory\Release\setupproj.msi,ProductA\ProductA.msi
solutiondirectory\another-proj-dir\Release\setupproj.msi,ProductB\ProductB.msi

(我们将这些分解出来的原因是我们编写多层应用程序并通过MSI部署到每个层 - 因此一个产品有多个msi都使用相同的版本号构建)

无论如何 - 我想把它更改为我不再在filelist.csv文件中有“Release”,而是像$ {build.mode}。我将用

包装上面的代码
<foreach item="String" in="Release,Debug" delim="," property="build.mode">
....as above
</foreach>

并且文件中字符串中嵌入的属性会被扩展。

我一直在砖墙上敲打几个小时,但是无法理解。

由于

1 个答案:

答案 0 :(得分:4)

可以使用自定义功能:

<?xml version="1.0"?>
<project>
    <script language="C#" prefix="vbfox" >
        <code>
            <![CDATA[
            [Function("expand")]
            public string ExpandString(string str)
            {
                return Project.Properties.ExpandProperties(str, Location.UnknownLocation);
            }
            ]]>
        </code>
    </script>
    <property name="hello" value="{path::combine('_hello_', '_world_')}" />
    <property name="hello" value="${'$' + hello}" />
    <echo message="${hello}" />
    <echo message="${vbfox::expand(hello)}" />
</project>