我有一个构建过程,它执行以下操作:
- 在一定数量(比如 10 个)COM DLL(一组命名的任务项)上运行 TLBIMP。这是我使用 Exec 任务的“导入”目标。
- 在 10 个互操作程序集上运行 ILDASM。这是我使用 Exec 任务的“反汇编”目标。
- 运行自定义任务以同时获取所有 10 个 IL 文件并对它们进行一些处理(细节并不重要,但此任务一起处理所有 10 个 IL 文件至关重要)。这是我的“工作”目标。
- 使用 ILASM 将 10 个 IL 文件重新组合成 10 个 DLL。这是我的“组装”目标,使用 Exec 任务。
- 运行 ILMerge 以将 10 个程序集合并为一个。这是我的“合并”目标,使用 Exec 任务。
当我进行干净的重建时,一切都很好。当我进行增量构建时,只有少数原始 COM DLL 发生了变化,MSBuild 非常正确地只对适当目标进行了部分构建,因为输出实际上相对于其输入已过时。
有没有一种方法可以让我“强制”MSBuild,只针对一个目标(上面的第 3 步)运行一个传递所有输入的任务,而不仅仅是过时的输入?我不想更改自定义任务的代码以对文件名进行硬编码,我希望将它们作为 MSBuild 脚本中的 TaskItems 提供,但必须为我的自定义任务提供从COM DLL 的原始 TaskItem 组,而不仅仅是使用此特定版本重建的那些。