MSBuild ITaskItem RecursiveDir元数据消失

时间:2010-01-15 09:35:12

标签: msbuild metadata msbuild-task filepath itaskitem

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

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

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

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

我正在使用MSBuild 3.5。

2 个答案:

答案 0 :(得分:1)

是的,这很正常。你无能为力。我已经完成了MSBuild源代码,显然,进入自定义任务的项目和退出的项目是完全不同的东西。 MSBuild最初创建了自己非常特殊的项目,之后它们变得非常“笨”。

我发现这种情况的解决方案:

  1. 创建一个包罗万象的ItemGroup。
  2. 创建一个自定义任务,生成包含您要删除的文件的
  3. 使用< ItemGroup Remove =“@(ListFromCustomTask)”/>

答案 1 :(得分:1)

我刚遇到同样的问题。通过将“RecursiveDir”元数据值显式设置为其当前值,我能够成功解决这个“限制”(我认为是MSBuild错误)。

执行此操作后,我的输出ITaskItem[]保留了该值。

相关问题