在我的NAnt构建脚本中,我试图找出在命令行上指定的目标的名称(如果没有指定,则找到默认目标)。
我一直在http://nant.sourceforge.net/release/0.85-rc1/help/functions/index.html#NAnt查看文档,但似乎找不到任何内容。我能找到的唯一一个稍微相关的函数是 target :: get-current-target ,它返回我当前所在目标的名称,而不是命令行中指定的目标。 / p>
任何人都知道是否有办法访问这些信息?我在NAntContrib中也找不到任何东西。好像它必须在某处。
感谢。
答案 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}" />
但是,此代码不会显示默认目标。