NAnt: Как получить целевое имя, указанное в командной строке - PullRequest
6 голосов
/ 29 января 2011

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

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

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

Спасибо.

Ответы [ 3 ]

2 голосов
/ 08 июня 2012

Вот простая функция, чтобы увидеть, была ли цель указана в командной строке. Просто вызовите 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>   
1 голос
/ 20 марта 2012

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

<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}" />

Однако этот код не покажет вам цели по умолчанию.

1 голос
/ 30 января 2011

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

...