我已尽力创建自定义 while 循环,但徒劳无功。
有没有人成功地在 NANT 中创建自定义 while 循环?

最佳答案

您可以创建自定义任务:

  <target name="sample">
    <property name="foo.value" value="0"/>
    <while property="foo.value" equals="0">
      <do>
        <echo message="${foo.value}"/>
        <property name="foo.value" value="${int::parse(foo.value) + 1}"/>
      </do>
    </while>
  </target>

  <script language="C#" prefix="directory">
    <code>
      <![CDATA[
[TaskName("while")]
public class WhileTask : TaskContainer
{
    private TaskContainer _doStuff;
    private string _propertyName;
    private string _equals;
    private string _notEquals;

    [BuildElement("do")]
    public TaskContainer StuffToDo
    {
        get
        {
            return this._doStuff;
        }
        set
        {
            this._doStuff = value;
        }
    }

    [TaskAttribute("property")]
    public string PropertyName
    {
        get
        {
            return this._propertyName;
        }
        set
        {
            this._propertyName = value;
        }
    }

    [TaskAttribute("equals")]
    public string Equals
    {
        get
        {
            return this._equals;
        }
        set
        {
            this._equals = value;
        }
    }

    [TaskAttribute("notequals")]
    public string NotEquals
    {
        get
        {
            return this._notEquals;
        }
        set
        {
            this._notEquals = value;
        }
    }

    protected override void ExecuteTask()
    {
        while (this.IsTrue())
        {
            this._doStuff.Execute();
        }
    }

    private bool IsTrue()
    {
      if (!string.IsNullOrEmpty(this.Equals))
      {
          return this.Properties[this.PropertyName] == this.Equals;
      }
      return this.Properties[this.PropertyName] != this.NotEquals;
    }
}
    ]]>
    </code>
  </script>

关于nant - 在 NANT 中创建自定义 WHILE 循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/945595/

10-15 02:51