Нант - Получить новейшую папку - PullRequest
4 голосов
/ 30 октября 2008

Существует ли относительно простой способ в nant без написания пользовательской задачи получить имя самой новой папки в определенной директории? Рекурсия не нужна. Я пытался сделать это с помощью directory :: get-creation-time и цикла foreach и if, yada yada. Это слишком сложно, и я собираюсь вместо этого создать пользовательское задание. Однако я подозреваю, что есть более простой способ сделать это с помощью существующих функций nant.

1 Ответ

6 голосов
/ 30 октября 2008

Полагаю, вы правы, утверждая, что выполнение этого способа в pure nant может быть грязным, особенно в том, как свойства работают в nant. Если вы не хотите писать пользовательскую задачу, вы всегда можете использовать скрипт задачи . Например:

<?xml version="1.0"?>
<project name="testing" basedir=".">

    <script language="C#" prefix="test" >
        <code>
            <![CDATA[
            [Function("find-newest-dir")]
            public static string FindNewestDir( string startDir ) {
                string theNewestDir = string.Empty;
                DateTime theCreateTime = new DateTime();
                DateTime theLastCreateTime = new DateTime();
                string[] theDirs = Directory.GetDirectories( startDir );
                for ( int theCurrentIdx = 0; theCurrentIdx < theDirs.Length; ++theCurrentIdx )
                {
                    if ( theCurrentIdx != 0 )
                    {
                        DateTime theCurrentDirCreateTime = Directory.GetCreationTime( theDirs[ theCurrentIdx ] );
                        if ( theCurrentDirCreateTime >= theCreateTime )
                        {
                            theNewestDir = theDirs[ theCurrentIdx ];
                            theCreateTime = theCurrentDirCreateTime;
                        }
                    }
                    else
                    {
                        theNewestDir = theDirs[ theCurrentIdx ];
                        theCreateTime = Directory.GetCreationTime( theDirs[ theCurrentIdx ] );
                    }
                }
                return theNewestDir;
            }
            ]]>
        </code>
    </script>

    <property name="dir" value="" overwrite="false"/>
    <echo message="The newest directory is: ${test::find-newest-dir( dir )}"/>

</project>

При этом нужно иметь возможность вызывать функцию, чтобы получить новейший каталог. Реализация фактической функции может быть изменена на что угодно (оптимизирована чуть больше или как угодно), но я включил краткий справочник о том, как использовать задачу скрипта . Это производит вывод как следующее:

nant -D:dir=c:\

NAnt 0.85 (Build 0.85.2478.0; release; 10/14/2006)
Copyright (C) 2001-2006 Gerry Shaw
http://nant.sourceforge.net

Buildfile: file:///C:/tmp/NAnt.build
Target framework: Microsoft .NET Framework 2.0

   [script] Scanning assembly "jdrgmbuy" for extensions.
     [echo] The newest directory is: C:\tmp

BUILD SUCCEEDED

Total time: 0.3 seconds.
...