代码之家  ›  专栏  ›  技术社区  ›  Sander

msbuild itaskitem recurvedir元数据消失

  •  4
  • Sander  · 技术社区  · 15 年前

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

    但是,当此结果集返回到msbuild时,递归的dir元数据将消失!它在自定义任务的execute()方法的末尾仍然具有正确的值,但是当我尝试在msbuild中使用recurvedir时,我发现它是空的!当然,这是个大问题!

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

    我见过其他msbuild任务库也返回ITaskitem数组,而不进行任何特殊处理。但没有人会遇到这个问题?奇怪的!

    我使用的是msbuild 3.5。

    2 回复  |  直到 12 年前
        1
  •  1
  •   Sander    14 年前

    是的,这是正常的。你对此无能为力。我已经彻底地了解了msbuild源代码,显然,进入自定义任务的项和返回的项是完全不同的。msbuild最初创建自己的非常特殊的项,后来它们变得非常“愚蠢”。

    我为这种情况找到的解决方案是:

    1. 创建一个全包项组。
    2. 创建生成项组的自定义任务 使用要删除的文件 .
    3. 使用<itemgroup remove=“@(listfromcustomtask)”/>
        2
  •  1
  •   Basic    12 年前

    我刚刚碰到了同样的问题。通过将“recurvedir”元数据值显式设置为当前值,我能够成功地解决这个“限制”(我认为是msbuild bug)。

    在这样做之后,我的输出 ITaskItem[] 保留价值。

    推荐文章