2011-01-29 1 views
6

Из моего сценария сборки NAnt я пытаюсь выяснить имя этой цели, которая была указана в командной строке (или целевая по умолчанию, если ни одна из них не была уточняются).NAnt: Как получить имя цели, указанное в командной строке

Я просматривал документацию по адресу http://nant.sourceforge.net/release/0.85-rc1/help/functions/index.html#NAnt и, похоже, ничего не нашел. Единственная слабо связанная функция, которую я могу найти, это target :: get-current-target, которая возвращает имя цели, в которой я сейчас находится, а не цель, указанная в командной строке.

Кто-нибудь знает, есть ли способ получить доступ к этой информации? Я тоже ничего не нашел в NAntContrib. Похоже, что это должно быть где-то.

Спасибо.

+0

Для чего это необходимо? – AlG

ответ

1

Одна вещь, которую вы могли бы сделать, это определить свойство, которое будет поддерживать имя для вас. Для каждой определяемой вами цели проверьте, установлено ли это свойство и задано ли имя текущей цели, если оно пустое.

1

Просто столкнулся с подобной задачей. Я решил это так, надеюсь, что это поможет немного.

<script language="C#"><code><![CDATA[ 
    public static void ScriptMain(Project project) 
    { 
     project.Properties["command-line-targets"] = string.Empty; 
     StringBuilder sb = new StringBuilder(); 
     string[] args = Environment.GetCommandLineArgs(); 
     for (int i = 1; i < args.Length; ++i) 
     { string arg = args[i]; 
      if (! arg.StartsWith("-")) 
      { 
       project.Log(Level.Info, " Command line target: " + arg); 
       sb.Append(" ").Append(arg); 
      } 
     } 
     if (sb.Length >= 1) 
     { 
      project.Properties["command-line-targets"] = sb.ToString(1, sb.Length - 1); 
     } 
    } 
]]></code></script> 
<echo message="Command line targets: ${command-line-targets}" /> 

Этот код не покажет вам цели (цели) по умолчанию.

2

Описание: Простая функция, чтобы узнать, указана ли цель в командной строке. Просто позвоните myFunctions :: isTargetOnCommandLine ('foo'), подставляя имя вашей цели.

<script language="C#" prefix="myFunctions" > 
    <code> 
    <![CDATA[ 
     [Function("isTargetOnCommandLine")] 
    public static bool isTargetOnCommandLine(string target) { 
    return (Array.IndexOf(Environment.GetCommandLineArgs(), target) != -1); 
    } 
    ]]> 
    </code> 
</script>