Мы используем TeamCity для непрерывной интеграции и собираем наши релизы с помощью файла решения (.sln). В прошлом я использовал Makefiles для различных систем, но никогда не использовал msbuild (я слышал, что это похоже на Makefiles + XML mashup). Я видел много сообщений о том, как использовать msbuild напрямую вместо файлов решения, но я не вижу четкого ответа на вопрос, зачем это делать.
Итак, зачем нам переходить с файлов решений на «make-файл» MSBuild? У нас есть пара выпусков, которые отличаются #define (специализированными сборками), но по большей части все работает.
Больше всего беспокоит то, что теперь нам нужно поддерживать две системы при добавлении проектов / исходного кода.
ОБНОВИТЬ:
Могут ли люди пролить свет на жизненный цикл и взаимодействие следующих трех компонентов?
- Visual Studio .sln файл
- Множество файлов уровня .csproj проекта (которые я понимаю как «sub» сценарии msbuild)
- Пользовательский скрипт msbuild
Можно ли с уверенностью сказать, что файлы .sln и .csproj используются / поддерживаются в обычном режиме из графического интерфейса IDE Visual Studio, а пользовательский сценарий msbuild написан от руки и обычно использует уже существующие отдельные файлы .csproj «как есть»? Это один из способов уменьшить дублирование при обслуживании ...
Был бы признателен за это на опыте других людей
источник
So, why should we bother migrating from solution files to an MSBuild 'makefile'?
Сначала вы должны сказать, почему вы об этом думаете? Разве файл решения не достаточно?Because it's reputed to be better practice
где?Ответы:
Первый факт заключается в том, что файл решения почти волшебным образом становится файлом MSBuild, когда MSBuild выполняет его, что и происходит при создании решения в visual studio. Кроме того, все эти файлы проекта - это просто файлы msbuild, управляемые Visual Studio. Фактически, файлы проекта обрабатывают большую часть настоящей грязной работы, независимо от того, строите ли вы из решений или строите из собственного скрипта msbuild.
Мы также используем TeamCity для создания и публикации приложений, и для большинства проектов мы обычно получим собственные сценарии msbuild. Роль, которую играют эти сценарии - что на самом деле непросто с файлом решения - упаковывает проект для развертывания или распространения. Обычно эти сценарии обрабатывают некоторые более оперативные аспекты, такие как создание веб-проекта в определенной папке или копирование в работающих конфигурациях, а не в конфигурациях разработки. Тяжелая работа, как правило, обрабатывается в самих файлах проекта - скрипт сборки просто ссылается на них, мы не пытаемся воссоздать это колесо. В целом, он прекрасно работает, и на самом деле не так много дублированного кода.
источник
Makefile для msbuild - это файл .sln (или файл vcproj).
Типичная командная строка msbuild будет выглядеть примерно так:
Смысл использования msbuild в том, что вы можете создавать сценарии и автоматизировать процесс сборки. Независимо от того, знали вы об этом или нет, TeamCity все время использует msbuild.
источник
Позвольте мне предложить мой взгляд на этот вопрос.
Хотя вы, конечно, можете просто использовать свой файл .SLN в качестве «процесса сборки», сам файл действительно не представляет собой процесс сборки. Файл решения действительно является частью Visual Studio и используется для разработки. Но Visual Studio - это только часть процесса сборки и выпуска. Вы не можете полагаться на решения для управления сборкой, и решения, безусловно, не предлагают масштабируемой ситуации сборки.
Вся цель создания процесса сборки - создание надежных сборок. То есть процесс сборки настолько надежен, что независимо от конфигурации сборки вы получите предсказуемый результат сборки. Каждый раз, каждая машина. Результатом предсказуемой и надежной сборки является то, что процесс тестирования, развертывания и выпуска может быть в высокой степени автоматизирован, что дополнительно снижает риск человеческих ошибок.
Создание процесса сборки требует инвестиций, но в некоторых случаях они необходимы. Вот некоторые факторы, которые способствуют процессу msbuild:
Позвольте мне привести пример, чтобы расширить мой последний пункт. Моя текущая компания занимается разработкой SharePoint. Как минимум, для разработки SharePoint требуется установить фундамент SharePoint для выполнения сборок на проектах SharePoint. Говоря об упрощенном сервере сборки, совершенно непрактично требовать, чтобы на сервере сборки был установлен SharePoint. SharePoint не только зверь с высокими требованиями, но и может иметь серьезные последствия для производительности при сборке, а сборки должны быть максимально быстрыми и экономичными. Использование MSBuild позволяет мне устранить это требование установки на сервере сборки. На самом деле, наш сервер сборки не имеет никаких требований к установке, кроме .NET Framework (требуется MSBuild) и Node.
В качестве ссылки я бы порекомендовал проверить эту книгу Саида Ибрагима Хашими: http://www.amazon.com/Inside-Microsoft-Build-Engine-Foundation/dp/0735645248/ref=sr_1_fkmr0_1?ie=UTF8&qid=1412014650&sr= 8-1-fkmr0 & ключевые слова = MSBuild + надежный + сборка
источник
Это именно тот вопрос, который я задавал себе несколько месяцев назад! У нас все было хорошо настроено:
А потом, когда речь заходит о воспроизводимости, стало очевидно, что это забил низко. Когда вы позволяете TeamCity быть вашим сценарием сборки, становится трудно воспроизводить аналогичные результаты, надежные, на вашей собственной машине разработки.
Когда у вас есть скрипт сборки, он знает все, что нужно сделать, и имеет все переменные на месте. Когда вы используете CI-сервер в качестве сценария сборки, и возникает какая-то проблема, например, сложный тест, не выполняющийся или не требующий сборки пакета развертывания вручную (согласно моему примеру), вам необходимо вручную собрать все этапы сборки.
Итак, вкратце , почему (MS) скрипт сборки? Потому что у вас будет больше требований, когда речь заходит о вашей сборке. Возможно, вы захотите запустить несколько тестов и сгенерировать из этого артефакты. Вы, вероятно, хотите сделать развертывания. И когда все, что вам нужно, должно быть работоспособным, будь то на сервере сборки или на вашей машине, оно может оказаться где угодно, только не в сценарии сборки.
источник