Метаданные MSBuild ITaskItem RecursiveDir исчезают - PullRequest
4 голосов
/ 15 января 2010

У меня есть пользовательская задача MSBuild, которая обрабатывает набор файлов и возвращает измененное подмножество этого. По сути, я просто создаю новый массив ITaskItem из входных данных, пропуская некоторые элементы.

Однако метаданные RecursiveDir исчезают, когда этот набор результатов возвращается в MSBuild! Это все еще с правильными значениями в конце метода Execute () моей пользовательской задачи, но когда я тогда пытаюсь использовать RecursiveDir в MSBuild, я обнаруживаю, что он пуст! Это, конечно, довольно проблематично!

Что мне делать? Это нормально? Другие метаданные, такие как имя файла и расширение, все еще там. Идентичность также указывает на правильный файл. Я никоим образом не изменяю метаданные в своей пользовательской задаче.

Я видел, как другие библиотеки задач MSBuild также возвращали массивы ITaskItem без какой-либо специальной обработки. Еще никто не сталкивался с этим вопросом? Bizarre!

Я использую MSBuild 3.5.

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Я только что столкнулся с той же самой проблемой. Мне удалось успешно обойти это «ограничение» (на мой взгляд, ошибка MSBuild), явно установив текущее значение метаданных «RecursiveDir».

После этого мой вывод ITaskItem[] сохранил значение.

1 голос
/ 17 марта 2010

Да, это нормально. Вы ничего не можете с этим поделать. Я тщательно изучил исходный код MSBuild и, по-видимому, элементы, входящие в пользовательское задание, и элементы, возвращающиеся назад, - это совершенно разные вещи. Сначала MSBuild создает свои особые предметы, а потом они становятся значительно «тупее».

Решение, которое я нашел для таких случаев:

  1. Создание универсальной группы товаров.
  2. Создайте пользовательскую задачу, которая генерирует ItemGroup с файлами, которые вы хотите удалить .
  3. Использовать
...