ファイルセット/パターンセットの refid 属性は展開されません。任意のファイルのセットを操作するターゲットをどのように作成しますか?

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

質問

それぞれが特定のターゲットを含むことを除いて、本質的に同じことを行う一連のターゲットがあります。 パターンセット タスクを実行する場所。これらのターゲットを単一の「再利用可能な」ターゲットに折りたたんで、代わりにファイルのセットを「パラメータとして」取りたいと考えています。

たとえば、これ

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

に置き換えられます

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

しかし、判明したのは、 refid で回答されたように展開されません nant-dev メール投稿 パターンセットとファイルセットはプロパティとは異なるためです。この動作しないコードでは、 echo と呼ばれる、その patternset 要素は文字通り名前が付けられたパターンセットを参照します ${ソースファイル} という名前の代わりに テスト.

さまざまなファイルセットを操作する再利用可能な NAnt ターゲットを作成するにはどうすればよいでしょうか?カスタムタスクを作成せずに、NAnt でこれをそのまま実行する方法はありますか?

役に立ちましたか?

解決

私はようやく私の目的を果たしており、これを思い付きました。ボーナスとして、これはまた、動的にターゲットを呼び出すことを示しています。

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

他のヒント

あなたが達成しようとしていることを完全に理解したかどうかはわかりませんが、属性を特定するべきではありません dynamicタスク property 仕事をしますか?

<target name="filesettest">
  <property name="sourcefiles" value="test" dynamic="true" />
  <!-- ... -->
</target>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top