l'attribut refid de l'ensemble de fichiers / patternset n'est pas élargi. Comment voulez-vous écrire une cible qui fonctionne sur un ensemble arbitraire de fichiers?

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

Question

J'ai un ensemble d'objectifs que chaque font essentiellement la même chose, sauf que chaque contient un patternset sur lequel effectuer ses tâches. Je veux effondrer ces objectifs en une seule cible « réutilisable » qui prend la place d'un ensemble de fichiers « comme paramètre ».

Par exemple, cette

<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>

sera remplacé par

<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>

Cependant, il se avère que refid n'est pas développé comme une réponse dans un Nant-dev email affichage parce patternsets et diffèrent des propriétés filesets. Dans ce code non-travail, quand echo est appelé, ses références d'éléments de patternset un patternset littéralement nommé $ {SourceFiles} au lieu de celui nommé test .

Comment peut-on écrire une cible de NAnt réutilisable qui fonctionne sur un ensemble de fichiers variation de? Est-il possible de le faire dans NAnt en l'état sans avoir recours à l'écriture des tâches personnalisées?

Était-ce utile?

La solution

Je suis finalement arrivé avec ce qui sert mes objectifs. En prime, cela démontre également appeler une cible dynamique.

<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>

Autres conseils

Je ne suis pas sûr complètement compris ce que vous essayez d'atteindre, mais ne devrait pas dynamic d'attribut property tâche faire le travail?

<target name="filesettest">
  <property name="sourcefiles" value="test" dynamic="true" />
  <!-- ... -->
</target>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top