Вызов задач 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, который может использоваться встроенными задачами, и выводятся встроенного задания, отправленного во второе пользовательское задание и т. д.

Другие вопросы по тегам