Я написал несколько скриптов MSBuild, которые позволяют мне создавать несколько сотен проектов.Одним из требований является копирование файлов в каталог сборки.У меня есть файл XML, который содержит список того, что нужно скопировать и куда его нужно скопировать.Этот XML-файл является просто ItemGroup, который я импортировал в основной проект, и все отлично работает.
Моя единственная проблема с этим - мой XML-файл со всеми элементами огромный (у меня есть сотни каталогов для копирования)!Это связано с тем, что все элементы должны иметь прикрепленные метаданные, что означает, что каждое объявление копии должно иметь 3 строки кода и три элемента XML.т.е.
<copy_to_build Include="$(FooDir)/BAZ/CoreDataFiles/*">
<Destination>$(BuildDir)//BAZ/</Destination>
</copy_to_build>
Это в три раза превышает размер моего сценария копирования и означает, что его сложно поддерживать.
Хорошо, поэтому я преобразовал свой XML в этот формат в другом файле:
<copy_to_build Source="$(FooDir)/BAZ/CoreDataFiles/*" Destination="$(BuildDir)//BAZ/" />
Что более кратко, поскольку в каждой команде копирования содержится один элемент xml.Гораздо легче читать.
Единственная проблема с этим, я не могу использовать их как «Предметы» в MSBuild, потому что метаданные отсутствуют, и Предметы НЕ МОГУТ иметь атрибут «Назначение».
Итак, я написал инструмент для «преобразования» моего краткого XML обратно в подробный формат MSBuild.Затем я столкнулся с дилеммой, как вернуть этот преобразованный XML-файл обратно в мой файл «проекта».Я обнаружил, что импорт должен выполняться на уровне проекта: поэтому я не могу «преобразовать» мой xml-файл внутри задачи или цели.Это означает, что файл должен быть готов ко времени обработки импорта.Следовательно, xml-файл не может быть переоценен внутри моей Target ... Так что, очевидно, мне нужно «преобразовать» мой xml-файл, прежде чем даже вызвать MSBuild из командной строки.Который добавляет сложные шаги в моем процессе сборки.
Итак, мой последний вопрос: как мне прочитать мои (одноэлементные) данные XML-файла и преобразовать их в (трехэлементные) элементы в цели или задаче?
Я слышал о динамических элементах, но я все еще достаточно нов, чтобы создавать, чтобы я не знал, как их использовать, или если они имеют отношение к моей проблеме.
Спасибо.