2011-01-29 20 views
6

Từ trong kịch bản xây dựng NAnt của tôi, tôi đang cố gắng tìm ra tên của mục tiêu đã được chỉ định trên dòng lệnh (hoặc đích mặc định nếu không có được chỉ định).NAnt: Cách lấy tên mục tiêu được chỉ định trên dòng lệnh

Tôi đã xem lại tài liệu tại http://nant.sourceforge.net/release/0.85-rc1/help/functions/index.html#NAnt và dường như không thể tìm thấy bất kỳ điều gì. Chỉ có một chút chức năng liên quan tôi có thể tìm thấy là mục tiêu :: get-current-target trả về tên của đích mà tôi hiện đang ở, chứ không phải mục tiêu được chỉ định trên dòng lệnh.

Bất kỳ ai biết có cách nào để truy cập thông tin này không? Tôi không thể tìm thấy bất cứ điều gì trong NAntContrib hoặc. Có vẻ như nó phải ở đâu đó.

Cảm ơn.

+0

Bạn cần nó để làm gì? – AlG

Trả lời

1

Một điều bạn có thể làm là xác định thuộc tính sẽ duy trì tên cho bạn. Đối với mỗi mục tiêu bạn xác định, hãy kiểm tra xem thuộc tính đó có đặt giá trị hay không và đặt giá trị đó thành tên của mục tiêu hiện tại nếu nó trống.

1

Tác vụ tương tự đã gặp phải. Tôi giải quyết nó theo cách này, hy vọng nó sẽ giúp một chút.

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

Mã này sẽ không hiển thị cho bạn (các) đích mặc định.

2

Đây là một chức năng đơn giản để xem mục tiêu đã được chỉ định trên dòng lệnh hay chưa. Chỉ cần gọi myFunctions :: isTargetOnCommandLine ('foo') thay thế tên mục tiêu của bạn.

<script language="C#" prefix="myFunctions" > 
    <code> 
    <![CDATA[ 
     [Function("isTargetOnCommandLine")] 
    public static bool isTargetOnCommandLine(string target) { 
    return (Array.IndexOf(Environment.GetCommandLineArgs(), target) != -1); 
    } 
    ]]> 
    </code> 
</script> 
Các vấn đề liên quan