2011-01-29 51 views
6

從我的NAnt構建腳本中,我試圖找出在命令行上指定的那個目標的名稱(或者默認目標,如果沒有指定)。NAnt:如何獲得在命令行上指定的目標名稱

我一直在審查文檔在http://nant.sourceforge.net/release/0.85-rc1/help/functions/index.html#NAnt似乎無法找到任何東西。我能找到的唯一稍微相關的函數是target :: get-current-target,它返回我當前所在的目標的名稱,而不是在命令行中指定的目標。

任何人都知道是否有方法訪問此信息?我在NAntContrib中也找不到任何東西。似乎它必須在那裏。

謝謝。

+0

你需要什麼? – AlG 2012-03-20 14:42:32

回答

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> 
相關問題