Вызов задач MSBuild из пользовательской задачи
Можно ли вызвать другие задачи MSBuild (CL, Link, Delete, MakeDir и т. Д.) Из пользовательской (встроенной или не встроенной) задачи, которая вызывается через файл проекта MSBuild? Что-то вроде:
<!-- In MSBuild File -->
<MyStrangeTask />
И в коде C# реализует "MyStrangeTask"
// After declaring class, properties, etc.
public override bool Execute()
{
// Call other MSBuild Tasks here: CL, Link, MakeDir, etc.
}
Да, возможно, можно дублировать функциональность некоторых задач (Delete, MakeDir и т. Д.), Но зачем изобретать велосипед? Кроме того, такие задачи, как CL и Link, потребуют много времени для повторной реализации.
Зачем мне это нужно?
Я пишу пользовательское задание, в котором в основном нужно копировать файлы, вызывать препроцессор CL и т. д. Можно задаться вопросом о самом дизайне такой "огромной" задачи, но давайте просто скажем, что некоторые требования заставляют нас идти по этому "утомительному" пути.
РЕДАКТИРОВАТЬ: подчеркнуть правильный контекст этого вопроса
Этот вопрос не с точки зрения дизайна, а с технической точки зрения.
Будучи новичком в этой области, я просто хочу знать, возможно ли это технически? Если да, то как? Если нет, то почему нет?
1 ответ
Прежде всего вы можете найти классы, используемые для задач MSBuild на MSDN. Но вы должны отметить, что это явно написано:
Этот API поддерживает инфраструктуру.NET Framework и не предназначен для использования непосредственно из вашего кода.
Также вы можете найти пример такого использования в этом блоге.
Так что это ответ на ваш вопрос, но, возможно, вам нужно другое решение: вы можете затормозить свою задачу во многих подзадачах: выходные данные из первой пользовательской задачи отправляются в проект MSBuild, который может использоваться встроенными задачами, и выводятся встроенного задания, отправленного во второе пользовательское задание и т. д.