NAnt:如何获取在命令行上指定的目标名称

时间:2011-01-29 16:22:13

标签: .net nant target

在我的NAnt构建脚本中,我试图找出在命令行上指定的目标的名称(如果没有指定,则找到默认目标)。

我一直在http://nant.sourceforge.net/release/0.85-rc1/help/functions/index.html#NAnt查看文档,但似乎找不到任何内容。我能找到的唯一一个稍微相关的函数是 target :: get-current-target ,它返回我当前所在目标的名称,而不是命令行中指定的目标。 / p>

任何人都知道是否有办法访问这些信息?我在NAntContrib中也找不到任何东西。好像它必须在某处。

感谢。

3 个答案:

答案 0 :(得分: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>   

答案 1 :(得分:1)

您可以做的一件事是定义一个为您维护名称的属性。对于您定义的每个目标,检查该属性是否具有值集,并将其设置为当前目标的名称(如果该值为空)。

答案 2 :(得分: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}" />

但是,此代码不会显示默认目标。