4

我有一个自定义 MSBuild 任务,它处理一组文件并返回其中的修改子集。基本上,我只是从输入中创建一个新的 ITaskItem 数组,跳过一些项目。

但是,当此结果集返回到 MSBuild 时,RecursiveDir 元数据会消失!在我的自定义任务的 Execute() 方法结束时它仍然具有正确的值,但是当我尝试在 MSBuild 中使用 RecursiveDir 时,我发现它是空的!这当然是个大问题!

我应该怎么办?这是正常的吗?文件名和扩展名等其他元数据仍然存在。身份也指向正确的文件。我不会在我的自定义任务中以任何方式修改元数据。

我已经看到其他 MSBuild 任务库也返回 ITaskItem 数组而无需任何特殊处理。然而没有人遇到这个问题?奇怪!

我正在使用 MSBuild 3.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 回答