次のことを行うビルドプロセスがあります。
- COM DLL (TaskItem の名前付きグループ) の数 (たとえば 10) に対して TLBIMP を実行します。これは、Exec タスクを使用する「インポート」ターゲットです。
- 10 個の相互運用アセンブリで ILDASM を実行します。これは、Exec タスクを使用する「逆アセンブル」ターゲットです。
- カスタム タスクを実行して、10 個の IL ファイルすべてを同時に取得し、それらに対していくつかの作業を行います (詳細は重要ではありませんが、このタスクで 10 個の IL ファイルすべてを一緒に処理することが重要です)。これが私の「仕事」の目標です。
- ILASM を使用して 10 個の IL ファイルを再アセンブルし、10 個の DLL に戻します。これは私の「アセンブル」ターゲットで、Exec タスクを使用します。
- ILMerge を実行して、10 個のアセンブリを 1 つにマージします。これは私の「マージ」ターゲットで、Exec タスクを使用します。
クリーンな再構築を行うと、すべてがうまくいきます。インクリメンタル ビルドを実行し、元の COM DLL のほんの一部が変更された場合、MSBuild は適切なターゲットの部分ビルドのみを正確に実行します。出力は、実際には入力に対して古くなっています。
古いものだけでなく、すべての入力を渡すタスクを実行するために、1 つのターゲット (上記の手順 3) に対してのみ MSBuild を "強制" する方法はありますか? カスタム タスクのコードを変更してファイル名をハードコーディングしたくありません。MSBuild スクリプトから TaskItems として提供したいのですが、カスタム タスクには、この特定のビルドで再構築されたものだけでなく、COM DLL の元の TaskItem グループ。