2011-01-29 17 views
6

Desde mi script de compilación NAnt, estoy tratando de averiguar el nombre del objetivo que se especificó en la línea de comando (o el objetivo predeterminado si no lo hubo) especificado).NAnt: Cómo obtener el nombre de destino que se especificó en la línea de comando

He estado revisando la documentación en http://nant.sourceforge.net/release/0.85-rc1/help/functions/index.html#NAnt y no puedo encontrar nada. La única función ligeramente relacionada que puedo encontrar es target :: get-current-target que devuelve el nombre del objetivo en el que me encuentro actualmente, no el objetivo que se especificó en la línea de comandos.

¿Alguien sabe si hay alguna manera de acceder a esta información? No pude encontrar nada en NAntContrib tampoco. Parece que tiene que estar allí en alguna parte.

Gracias.

+0

¿Para qué lo necesitas? – AlG

Respuesta

1

Una cosa que podría hacer es definir una propiedad que mantendrá el nombre para usted. Para cada objetivo que defina, verifique si esa propiedad tiene un valor establecido y ajústelo al nombre del objetivo actual si está vacío.

1

Acabo de encontrar una tarea similar. Lo resolví de esta manera, espero que ayude un poco.

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

Este código no le mostrará el objetivo (s) por defecto, sin embargo.

2

Aquí hay una función simple para ver si el objetivo se especificó en la línea de comando. Simplemente llame al myFunctions :: isTargetOnCommandLine ('foo') sustituyendo el nombre de su destino.

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