В моем последнем проекте мы использовали MSBuild в качестве языка сценариев. (да, действительно!) Мы также написали сотни пользовательских задач MSBuild для частей, которые имели больше смысла в C#. (Я даже написал задачу MSBuild, чтобы сгенерировать шаблонный код для задачи MSBuild. Да, она поглотила себя.)
Хотя я никому не рекомендую использовать тот же подход, одна из вещей, которые я нашел очень полезным, — это встроенное управление зависимостями. Как и следовало ожидать, было легко выразить отношения зависимости и позволить MSBuild позаботиться об их удовлетворении. Например, почти каждый шаг в нашем программном обеспечении требовал, чтобы определенный набор файлов был скопирован в определенное место. Вы могли бы легко написать:
Step1: CopyFiles
Step2: CopyFiles, Step1
и когда вы выполняете Step2, он будет копировать файлы только один раз.
Создание и удовлетворение дерева зависимостей — довольно распространенное явление в программном обеспечении. Я бы хотел, чтобы команда MSBuild взяла свой код управления зависимостями, отделила его от MSBuild и переместила в .NET Framework, где каждый может его использовать. После этого как вы думаете, какой вариант управления зависимостями лучше всего?