msbuild metadata msbuild-task filepath itaskitem

MSBuild ITaskItem RecursiveDir metadata desaparece



msbuild-task filepath (2)

Sí, esto es normal. No hay nada que puedas hacer al respecto. He revisado exhaustivamente el código fuente de MSBuild y, aparentemente, los elementos que entran en una tarea personalizada y los elementos que vuelven a salir son cosas completamente diferentes. MSBuild crea sus propios elementos muy especiales al principio y luego se vuelven significativamente "más tontos".

La solución que encontré para tales casos:

  1. Crear un ItemGroup todo incluido.
  2. Cree una tarea personalizada que genere un ItemGroup con los archivos que desea eliminar .
  3. Use <ItemGroup Remove = "@ (ListFromCustomTask)" />

Tengo una tarea personalizada de MSBuild, que procesa un conjunto de archivos y devuelve un subconjunto modificado de esto. Básicamente, simplemente creo una nueva matriz ITaskItem de la entrada, omitiendo algunos elementos.

Sin embargo, los metadatos RecursiveDir desaparecen cuando este conjunto de resultados se devuelve a MSBuild. Todavía está con los valores correctos al final del método Execute () de mi tarea personalizada, pero cuando trato de usar RecursiveDir en MSBuild, ¡me parece que está vacío! Esto es, por supuesto, ¡un gran problema!

¿Que debería hacer? ¿Esto es normal? Los otros metadatos como Nombre de archivo y Extensión todavía están allí. La identidad también apunta al archivo correcto. No modifico los metadatos de ninguna manera en mi tarea personalizada.

He visto que otras bibliotecas de tareas de MSBuild también devuelven matrices ITaskItem sin ningún procesamiento especial. Sin embargo, nadie se ha encontrado con este problema? ¡Extraño!

Estoy usando MSBuild 3.5.


Me encontré con este mismo problema exacto. Pude trabajar con éxito alrededor de esta "limitación" (error de MSBuild en mi opinión) al establecer explícitamente el valor de los metadatos "RecursiveDir" en su valor actual.

Después de hacer esto, mi salida ITaskItem[] retuvo el valor.