В чем смысл MSBUILD / NANT, если вы собираетесь просто писать процедурный код? Разве Powershell не лучше?

В настоящее время я пишу сценарий развертывания в MSBUILD, и после загрузки нескольких расширений я обнаружил, что смотрю на файл сборки и думаю:

Какой смысл делать это в MSBUILD?

Этот сценарий развертывания является полностью процедурным: остановка веб-сайта, удаление папки, копирование файлов, изменение разрешений, запуск веб-сайта и т. Д. Нет никаких причудливых зависимостей, которые, как я полагаю, являются естественной областью таких инструментов, как MSBUILD, NANT и MAKE.

Единственная причина, по которой я могу использовать MSBUILD, заключается в том, что он входит в стандартную комплектацию, и его легко добавить в свой SVN, поэтому сборки «просто работают».

Проблема в том, что я должен все это время тратить на то, чтобы делать «базовые вещи» в MSBUILD (поиск расширений, разработка синтаксиса), что было бы тривиально (хотя и более подробно) в Powershell или даже в командной строке.

Итак, подведем итоги: Подходят ли процедурные задачи для MSBUILD или вам лучше использовать что-то вроде Powershell?


person Jack Ukleja    schedule 18.02.2009    source источник


Ответы (5)


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

person Wedge    schedule 24.03.2009
comment
Я отмечаю это как ответ, так как это тот же вывод, к которому я пришел: используйте MSBUILD для создания sln / proj, но не попадайтесь в ловушку использования расширений MSBUILD для всего ... в основном бессмысленно - person Jack Ukleja; 14.01.2010

Проверьте PSAKE и узнайте, что вы думаете.

http://www.jameskovacs.com/blog/IntroductionPsake.aspx http://powerscripting.wordpress.com/2009/01/25/episode-56-james-kovacs-talks-about-psake/ http://code.google.com/p/psake/

Экспериментируйте! Наслаждаться! Привлекать!

Джеффри Сновер [MSFT] Партнер-архитектор по управлению Windows

person Jeffrey Snover - MSFT    schedule 21.02.2009

Это действительно зависит от вашей ситуации. Однако, если бы это было мое дело, и вы использовали Visual Studio - я бы сказал, да, оставайтесь с MSBuild ради интеграции.

С другой стороны, я бы выбрал MSBUILD, поскольку, хотя задачи очень процедурны, он дает вам гибкость для расширения этого процесса сборки позже для обработки более сложных задач.

person Fritz H    schedule 18.02.2009
comment
Разве использование чего-то вроде Powershell не дало бы мне еще большей гибкости для расширения процесса? - person Jack Ukleja; 18.02.2009

msbuild поставляется с .NET. Вы должны добавить powershell к серверам / пользователи должны добавить его - по крайней мере, через Windows XP, server 2003. Это может быть или не быть проблемой в вашей среде.

Я не думаю, что процедурные задачи подходят для написания в MSBUILD просто потому, что чем короче msbuild, тем лучше для меня. Я мог бы использовать msbuild для их вызова, но, вероятно, напишу библиотеку расширений для их реализации.

person Precipitous    schedule 10.05.2009

Я думаю, это зависит от того, как протекает ваш процесс выпуска и развертывания, поскольку для уменьшения имеет смысл использовать расширение MSBuild или запускать power-shell. MSBuild позволяет гибко обрабатывать все этапы процесса в одном автономном потоке выполнения.

Если вам нужно, чтобы это происходило одновременно, то MSBuild дает вам контроль над «Событиями» или целями, которые можно переопределить в соответствии с вашими требованиями.

Если требуется развернуть ваши артефакты после компиляции кода, то MSBuild хорошо подходит для этого, поскольку вы можете использовать цель AfterBuild, которая запускается во время стандартного выполнения MSBuild. Это может сделать ваш процесс самодостаточным.

Powershell не может собрать ваш код. Он должен вызвать MSBuild из вашего скрипта. Для меня это вопрос того, чтобы ваша сборка и развертывание были автономными и, следовательно, были бы лучше организованы.

MSBuild - это основная платформа и движок сборки Microsoft.

person SoftwareCarpenter    schedule 20.03.2012