В чем разница между MSBuild и F # FAKE?

Я новичок в экосистеме .NET и прыгаю с F #, исходя из Java-land. Я пытаюсь обернуть голову вокруг инструментария и процесса сборки.

Я понимаю, что MSBuild - это инструмент сборки для приложений .NET, и что его конфигурация сконфигурирована в XML в файле .sln и/или. * proj. Правильно ли я предполагаю, что это аналогично файлу pom.xml или build.gradle в java?

В любом случае, если MSBuild - это инструмент построения, для чего именно FAKE? Что может FAKE сделать, что MSBuild не может? Это просто более дружественная "оболочка" в файлах конфигурации MSBuild?

Edit:

Я наткнулся на видео под названием Ionide и состояние F # с открытым исходным кодом, и в нем главный докладчик предлагает причину. * proj файлы по-прежнему необходимы в VSCode, по крайней мере. Следующее не является прямой цитатой, но ближе к концу, он говорит что-то вроде

Система MSBuild вообще не нужна в плане взаимодействия с компилятор и заставить ваш код работать. Единственная причина, по которой мы не можем в то же время вытащить его из-за того, что служба компилятора F # предоставляет информацию всплывающей подсказки, определенный тип проверки типов и т.д. - зависит от файл проекта, но мы работаем над его расширением, чтобы он могут использовать различные типы форматов.

Ответ 1

Ну, идея Fake заключается в том, что для сборки есть нечто большее, чем просто компиляция. Типичная настройка Fake делегирует фактическую компиляцию MSBuild и выполняет задачи, которые ее окружают: запуск тестов, упаковка, развертывание и т.д. Хотя технически это возможно сделать в MSBuild, его синтаксис и особенности XML могут сделать это действительно болезненный опыт. Поэтому обычно лучше всего содержать. * Proj чисто декларативный (перечислять исходные файлы, ссылки и свойства) и использовать Fake для описания последовательности задач, составляющих сборку, где одной из этих задач является вызов MSBuild для выполнения компиляции.

Что касается того, почему мы по-прежнему склонны использовать MSBuild в качестве посредника вместо прямого вызова компилятора из Fake, это в основном из-за того, что IDE полагаются на. * proj как формат описания проекта и вызывают сами MSBuild, когда вы нажимаете "Build", поэтому мы хотим обеспечить согласованность между компиляцией из IDE и построением из командной строки.