Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MSBuild ITaskItem RecursiveDir元数据消失_Msbuild_Metadata_Msbuild Task_Filepath_Itaskitem - Fatal编程技术网

MSBuild ITaskItem RecursiveDir元数据消失

MSBuild ITaskItem RecursiveDir元数据消失,msbuild,metadata,msbuild-task,filepath,itaskitem,Msbuild,Metadata,Msbuild Task,Filepath,Itaskitem,我有一个自定义MSBuild任务,它处理一组文件并返回该文件的修改子集。基本上,我只是从输入中创建一个新的ITaskItem数组,跳过一些项 但是,当此结果集返回到MSBuild时,RecursiveDir元数据将消失!它在自定义任务的Execute()方法的末尾仍然具有正确的值,但是当我尝试在MSBuild中使用RecursiveDir时,我发现它是空的!当然,这是一个相当大的问题 我该怎么办?这正常吗?其他元数据(如文件名和扩展名)仍然存在。标识还指向正确的文件。我不会在自定义任务中以任何方

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

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

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

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


我正在使用MSBuild 3.5。

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

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

  • 创建一个全包项目组
  • 创建一个自定义任务,该任务生成一个包含要删除的文件的项目组
  • 使用

  • 我刚刚遇到了同样的问题。通过显式地将“RecursiveDir”元数据值设置为其当前值,我成功地克服了这个“限制”(我认为是MSBuild bug)

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