nant: расширение свойств в строке - PullRequest
3 голосов
/ 27 февраля 2009

Резюме:

Как развернуть свойство со значением "download \ $ {bulidmode} \ project \ setup.msi" до "download \ Debug \ project \ setup.msi", если свойство buildmode содержало отладку, поэтому я могу использовать его как 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, созданных с одинаковыми номерами версий)

В любом случае - я хочу изменить это так, чтобы у меня больше не было «Release» в файле filelist.csv, а было что-то вроде $ {build.mode}. Я бы обернул вышеуказанный код с

<foreach item="String" in="Release,Debug" delim="," property="build.mode">
....as above
</foreach>

и свойство, встроенное в строку в файле, расширяется.

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

Спасибо

1 Ответ

4 голосов
/ 27 февраля 2009

Это возможно с пользовательской функцией:

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