Zeichnungs- / patternset des refid Attribut wird nicht erweitert. Wie würden Sie ein Ziel schreiben, die auf einem beliebigen Satz von Dateien arbeiten?

StackOverflow https://stackoverflow.com/questions/3840846

Frage

Ich habe eine Reihe von Zielen, dass jeder tut im Wesentlichen dasselbe mit Ausnahme jeweils ein bestimmten enthält patternset , auf denen ihre Aufgaben zu erfüllen. Ich möchte diese Ziele in einem einzigen „wiederverwendbar“ Ziel kollabieren, dass stattdessen eine Reihe von Dateien „als Parameter“ annimmt.

Zum Beispiel diese

<target name="echo1">
  <foreach item="File" property="fn">
    <in>
      <items>
        <include name="*.config"/>
      </items>
    </in>
    <do>
      <echo message="${fn}" />
    </do>
  </foreach>
</target>

<target name="echo2">
  <foreach item="File" property="fn">
    <in>
      <items>
        <include name="*.xml"/>
      </items>
    </in>
    <do>
      <echo message="${fn}" />
    </do>
  </foreach>
</target>

<target name="use">
  <call target="echo1"/>
  <call target="echo2"/>
</target>

würde ersetzt werden durch

<patternset id="configs">
   <include name="*.config"/>
</patternset>

<patternset id="xmls">
   <include name="*.xml"/>
</patternset>

<target name="echo">
  <foreach item="File" property="fn">
    <in>
      <items>
        <patternset refid="${sourcefiles}"/>
      </items>
    </in>
    <do>
      <echo message="${fn}" />
    </do>
  </foreach>
</target>

<target name="use">
  <property name="sourcefiles" value="configs"/>
  <call target="echo"/>
  <property name="sourcefiles" value="xmls"/>
  <call target="echo"/>
</target>

Es stellt sich jedoch heraus, dass refid nicht erweitert wird, wie in einem nant-dev E-Mail-Eintrag weil patternsets und Dateigruppen unterscheiden sich von Eigenschaften. In diesem nicht funktionierenden Code, wenn echo genannt wird, seine patternset Element verweist auf einen patternset buchstäblich namens $ {} Quelldateien anstelle des einen Namen Test .

Wie würde man ein wiederverwendbares NAnt Ziel schreiben, die auf einem Variierung Satz von Dateien arbeiten? Gibt es eine Möglichkeit, dies in NAnt zu tun, wie sie ist, ohne auf Schreiben von benutzerdefinierten Aufgaben?

War es hilfreich?

Lösung

Ich kam schließlich mit diesem nach oben, was meine Zwecke dient. Als Bonus zeigt dies auch dynamisch ein Ziel aufrufen.

<project
  name="dynamic-fileset"
  default="use"
  xmlns="http://nant.sourceforge.net/release/0.86-beta1/nant.xsd"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <target name="configs">
        <fileset id="files">
           <include name="*.config"/>
        </fileset>
    </target>

    <target name="xmls">
        <fileset id="files">
           <include name="*.xml"/>
        </fileset>
    </target>

    <target name="echo">
      <foreach item="File" property="fn">
        <in>
          <items refid="files"/>
        </in>
        <do>
          <echo message="${fn}" />
        </do>
      </foreach>
    </target>

    <target name="use">
      <property name="grouplist" value="xmls,configs"/>
      <foreach item="String" in="${grouplist}" delim="," property="filegroup">
        <do>
          <call target="${filegroup}"/>
          <call target="echo"/>
        </do>
      </foreach>        
    </target>
</project>

Andere Tipps

Ich bin sicher, dass ich nicht ganz verstanden, was Sie versuchen, ein href zu erreichen, soll aber nicht Attribut dynamic von <= "http://nant.sourceforge.net/release/latest/help/tasks/property .html“rel = "nofollow"> Aufgabe property die Arbeit zu tun?

<target name="filesettest">
  <property name="sourcefiles" value="test" dynamic="true" />
  <!-- ... -->
</target>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top