4

一連のファイルを処理し、これの変更されたサブセットを返すカスタムMSBuildタスクがあります。基本的に、いくつかの項目をスキップして、入力から新しいITaskItem配列を作成するだけです。

ただし、この結果セットがMSBuildに返されると、RecursiveDirメタデータは表示されなくなります。カスタムタスクのExecute()メソッドの最後にはまだ正しい値がありますが、MSBuildでRecursiveDirを使用しようとすると、空であることがわかります。もちろん、これはかなりの問題です。

私は何をすべきか?これは正常ですか?ファイル名や拡張子などの他のメタデータはまだあります。IDは正しいファイルも指します。カスタムタスクでメタデータを変更することはありません。

他のMSBuildタスクライブラリも特別な処理なしでITaskItem配列を返すのを見てきました。しかし、誰もこの問題に遭遇していませんか?奇妙な!

MSBuild3.5を使用しています。

4

2 に答える 2

1

はい、これは正常です。それについてあなたができることは何もありません。私はMSBuildのソースコードを徹底的に調べましたが、どうやら、カスタムタスクに入るアイテムと、戻ってくるアイテムはまったく別のものです。MSBuildは、最初は独自の非常に特別なアイテムを作成し、その後、それらは大幅に「面倒」になります。

そのような場合に私が見つけた解決策:

  1. 包括的なItemGroupを作成します。
  2. 削除するファイルを使用してItemGroupを生成するカスタムタスクを作成します。
  3. <ItemGroup Remove = "@(ListFromCustomTask)"/>を使用します
于 2010-03-17T08:12:59.353 に答える
1

私はちょうどこれとまったく同じ問題に遭遇しました。「RecursiveDir」メタデータ値を現在の値に明示的に設定することで、この「制限」(私の意見ではMSBuildのバグ)をうまく回避することができました。

これを行った後、私の出力ITaskItem[]は値を保持しました。

于 2012-02-09T15:09:02.317 に答える