Как в nant пакетно обработать файлы?

2

Нужно к некоторым файлам в определенной папке применить какое-либо (произвольное) действие. Как это сделать в NAnt?

Новые ответы


1

Обычно делается следующим образом:

  1. Создается задача (target A), которая будет выполняться для каждого файла. Путь к файлу, и другие данные, которае могут понадобиться, считываются из специальных свойств (property).
  2. Создается задача (target B), которая перебирает все файлы по определенному пути, и вызывает для каждого из них задачу target A, предварительно задав необходимые свойства.

Пример такого скрипта можно увидеть, в проекте CommonLogging. Вот target, который запускает модульные тесты для каждой сборки из папки bin:

<target name="TestAllAssemblies">
    <foreach item="File" property="filename">
        <in>
            <items basedir="${build.dir}">
                <exclude name="net/**" />
                <include name="**/*.Tests.dll" />
            </items>
        </in>
        <do>
            <property 
                 name="test.assemblyfile" 
                 value="${filename}" overwrite="true" />
            <call target="common.run-tests.nunit" />
        </do>
    </foreach>
</target>

Вот дочерний target, который вызывается для каждой найденной сборки тестов:

<target name="common.run-tests.nunit">
   <property name="test.assemblyname" value="${path::get-file-name-without-extension(test.assemblyfile)}" overwrite="true" />
   <property name="test.bin.dir" value="${directory::get-parent-directory(test.assemblyfile + '/')}" overwrite="true" />

   <echo message="Unit Testing ${test.assemblyname}, File='${test.assemblyfile}', WorkingDir='${test.bin.dir}'" />

   <exec program="${tool.dir}/nunit/nunit-console.exe" workingdir="${test.bin.dir}" verbose="true">
       <arg value="/xml:${test.assemblyname}.dll-TestResults.xml" />
       <arg value="/nologo" />
       <arg value="/noshadow" />
       <arg value="/framework:${nant.settings.currentframework}" />
       <arg line="${test.assemblyfile}" />
   </exec>
</target>

Как видно, дочерний элемент target использует свойство test.assemblyfile, хранящее путь к текущему файлу и устанавлеваемое родительским таском.


v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.