2010-01-15 4 views
4

J'ai une tâche MSBuild personnalisée qui traite un ensemble de fichiers et renvoie un sous-ensemble modifié de cette tâche. Fondamentalement, je viens de créer un nouveau tableau ITaskItem hors de l'entrée, en sautant certains éléments. Toutefois, les métadonnées RecursiveDir disparaissent lorsque ce jeu de résultats est renvoyé à MSBuild! Il est toujours avec les valeurs correctes à la fin de la méthode Execute() de ma tâche personnalisée mais lorsque j'essaie d'utiliser RecursiveDir dans MSBuild, je trouve qu'il est vide! C'est, bien sûr, tout à fait un problème!Les métadonnées MSBuild ITaskItem RecursiveDir disparaissent

Que dois-je faire? Est-ce normal? Les autres métadonnées telles que Filename et Extension sont toujours présentes. L'identité pointe également vers le bon fichier. Je ne modifie en aucun cas les métadonnées dans ma tâche personnalisée.

J'ai vu d'autres bibliothèques de tâches MSBuild retourner également des tableaux ITaskItem sans aucun traitement spécial. Pourtant, personne n'a rencontré ce problème? Bizarre!

J'utilise MSBuild 3.5.

Répondre

1

Oui, c'est normal. Il n'y a rien que vous puissiez faire à ce sujet. J'ai parcouru le code source de MSBuild et, apparemment, les éléments entrant dans une tâche personnalisée et les éléments qui reviennent sont des choses complètement différentes. MSBuild crée ses propres éléments très spéciaux au début et plus tard ils deviennent significativement "stupéfiants".

La solution que je trouve pour de tels cas:

  1. Créer un ItemGroup tout compris.
  2. Créez une tâche personnalisée qui génère un groupe d'éléments avec les fichiers que vous souhaitez supprimer.
  3. Utilisez < ItemGroup remove = "@ (ListFromCustomTask)"/>
1

Je viens de rencontrer dans ce même problème exactement. J'ai réussi à contourner cette "limitation" (bogue MSBuild à mon avis) en définissant explicitement la valeur de métadonnées "RecursiveDir" à sa valeur actuelle. Ensuite, ma sortie ITaskItem[] a conservé la valeur.

Questions connexes