Почему в .NET нет необходимости в Maven?

У меня сложилось впечатление, что в мире .NET нет реальной необходимости в инструментах, подобных Maven.

Мне известно, что есть Byldan и NMaven (жив ли он?), Но я еще не видел реальный проект, который их использует.

Кроме того, в большинстве проектов .NET, над которыми я работал, никогда не говорилось о потребности в инструментах, подобных Maven. Проблемы, которые решает Maven maven (автоматическое разрешение зависимостей, структура сборки на основе соглашений ...), кажутся не столь важными в .NET.

Мое восприятие правильное?

Почему это так?

Что люди действительно используют в .NET? Нет вообще автоматического разрешения зависимостей?

Пишут ли они свои собственные инструменты сборки?

Кто-нибудь использует сам Maven для управления своими .NET-проектами? Это хороший выбор?

Какой у вас опыт?


person jbandi    schedule 08.04.2009    source источник
comment
Microsoft изучает подход Maven. Если вы перейдете на последнюю версию ASP.net 5, вы найдете там похожие вещи. Вместо подробного XML там используется файл json для указания зависимостей.   -  person Bargitta    schedule 28.01.2016
comment
@Bargitta: project.json снова устарел: xoofx.com/ блог / 11.05.2016 / goodbye-project-json   -  person Janus Troelsen    schedule 02.08.2016
comment
@JanusTroelsen они идут назад   -  person Bargitta    schedule 03.08.2016


Ответы (8)


Для разрешения зависимости артефактов я бы сказал, что Nuget теперь является предпочтительной альтернативой. Он поддерживает и способствует разрешению времени сборки, то есть нет необходимости проверять артефакты двоичных зависимостей в vcs. См. эти статьи.

Начиная с версии 2.7 Nuget, разрешение времени сборки имеет еще лучшую поддержку с помощью команды Nuget restore, являющейся одним из вариантов.

Обновление. Теперь доступен альтернативный менеджер пакетов, совместимый с nuget - Paket это лучше, чем ванильный клиент nuget для обработки временных зависимостей и согласования зависимостей между проектами в одном решении. Инструменты также кажутся довольно зрелыми (интеграция VS и инструменты командной строки для CI)

person 8DH    schedule 11.03.2011
comment
Nuget - это то, что вам нужно. Без сомнений. - person BlueM; 30.06.2014

Maven продвигается проектами apache, которые являются основной частью огромной инфраструктуры Java с открытым исходным кодом. С этим должно быть связано широкое распространение maven, и текущий уровень зрелости (качества) также очень хороший.

Я не думаю, что в мире .NET с открытым исходным кодом есть какие-либо серьезные участники с открытым исходным кодом, которые могли бы продвигать такую ​​концепцию. Каким-то образом кажется, что .NET всегда ждет редмонда для этих вещей.

person krosenvold    schedule 08.04.2009
comment
Это потому, что в мире РС, если вы создадите свой собственный инструмент, и это хорошо, скорее всего, РС выпустит такой же через год или два, и люди перестанут использовать ваш. (Как выразился Джоэл Спольски, если вам удастся написать что-то удачное, вы можете обнаружить, что просто проводите исследование рынка для Microsoft.) - person Nate C-K; 31.08.2011
comment
@ NateC-K, разве это не хорошо? такой жестокий мир это. Если ms не делает таких вещей, есть секта, которая жалуется, что она этого не делает, и когда ms действительно принимает правильные значимые проекты и начинает вкладывать усилия и ресурсы, даже тогда это высмеивают, это также не то, что нужно сообществу, правильные инструменты охватывая более широкую аудиторию, с этими вещами экосистема разработчиков будет расти вместе - person Srivathsa Harish Venkataramana; 17.08.2015
comment
Если проект с открытым исходным кодом создал инструмент, который нужен сообществу, то нет, MS создание эквивалентного инструмента для его замены - это не то, что нужно. В худшем случае это дублирование усилий, не имеющее очевидной цели, кроме как гарантировать, что MS владеет всем. Что более уместно, так это для MS поручить некоторым платным разработчикам внести свой вклад в проект с открытым исходным кодом. Однако, поскольку я сделал свой предыдущий комментарий, похоже, что MS приложила серьезные усилия, чтобы лучше взаимодействовать с сообществом открытого исходного кода, что я ценю. Я надеюсь, что в ближайшие годы эти отношения продолжат улучшаться. - person Nate C-K; 17.08.2015
comment
В 2016 году ситуация определенно изменилась в том, что касается ожидания Redmond для этих вещей (инструментов сборки). Теперь у нас есть dotnet (core) на linux, а Nexus 3 поддерживает nuget. Целый новый мир. - person Nico de Wet; 29.10.2016
comment
Я почти уверен, что они обычно не перестраивают проекты с открытым исходным кодом, а поддерживают и улучшают их - так же, как Json.Net. Авалония - еще один пример - person gilmishal; 10.12.2019

Хотя вопрос старый, вот мои мысли. Maven - это не просто инструмент сборки, он делает гораздо больше, например, управление репозиториями, управление проектами, управление зависимостями, управление сборкой и так далее ...

Но главная привлекательность, на мой взгляд, - это управление зависимостями. JAR hell - это большая проблема в мире Java с самого начала, и вам нужен инструмент, чтобы справиться с ней. В мире .Net нет такой проблемы (на самом деле отсутствие DLL-ада рекламировалось как главная достопримечательность в первые дни .Net), поэтому большинству людей нравится MSBuild. Позже из-за наличия большого количества сторонних библиотек возникли проблемы с управлением. Чтобы избавиться от этой проблемы, у них теперь есть Nuget.

Короче говоря, MsBuild + Nuget достаточно хорош в мире .Net для большей части проекта, Maven для них просто излишек.

person Tinku    schedule 24.03.2013
comment
Я полностью согласен. Первоначальный вопрос датирован до того, как был представлен NuGet. - person jbandi; 25.03.2013

Я согласен со многими ответами здесь. В .NET не было большого количества независимых IDE, вы использовали Visual Studio для написания кода, управления своими зависимостями и т. Д. Решение в VS достаточно хорошо для MSBuild, так что это то, что вы используете на своих серверах сборки.

С другой стороны, в Java появилось множество IDE, и Java пошла по пути управления проектами, внешними по отношению к IDE. Предоставление разработчикам возможности использовать IDE по своему выбору. Я недавно начал кросс-тренинг с C # на Java, и могу сказать, что концепция сборки maven довольно чужда, но через некоторое время она мне нравится, и, что более важно, я вижу, что предлагает мне концепция репо.

Теперь, когда зависимости, управляемые VS, требуют, чтобы вы добавляли либо ссылку на проект, либо ссылку на DLL. Это добавление ссылки на DLL некорректно. Как вы управляете сменой версий, как вы структурируете сторонние библиотеки DLL из внешних и внутренних источников, а также библиотеки DLL, которые вы хотели бы включить из своей собственной команды, но не в качестве ссылки на проект. Я сделал много обходных решений, основанных в целом на файловой структуре каталогов, но ни один из них не является элегантным или отличным при изменении версий. Также затрудняет ветвление, потому что это становится важным фактором при структурировании каталогов.

Сейчас я работал с Java и публичными репозиториями mavan, супер круто. Я работал с Python, и pip install эффективно снова извлекал из общедоступных репозиториев. Наконец, я снова сделал кое-что на C # с VS 2015, и интеграция с Nuget - это именно то, чего не хватало.

Теперь в корпоративной среде публичные репозитории не всегда доступны напрямую, поэтому вам нужны корпоративные репозитории. И снова экосистемы, отличные от Microsoft, впереди в этом.

В основном, подводя итоги, Java эволюционировала из среды с более открытым исходным кодом, где поддержка проекта IDE не использовалась, тогда как .NET эволюционировала из Visual Studio, управляющей проектом, и эти разные пути означали, что репозитории позже появятся в Visual Studio.

Наконец, и это мое наблюдение, сообщество Java имеет тенденцию больше использовать фреймворки других людей, поскольку базовые библиотеки Java предлагают меньше. В то время как .NET люди пишут намного больше своего собственного кода. Сообщество Java имеет более обширную экосистему шаблонов и практик, тогда как .NET снова написала собственный код или ждала Microsoft. Это меняется, но снова показывает, почему .NET отстает от Java в требованиях к репозиториям.

person Mark Channing    schedule 15.04.2016
comment
Вы пробовали Пакет? - person Janus Troelsen; 02.08.2016
comment
С ядром .net у нас сегодня есть IDE для Jetbrains Rider. Я буду ожидать большего. - person John; 28.05.2017

Мы используем NAnt, потому что нет более зрелой альтернативы. Работая над несколькими проектами одновременно, мы работали над тем, чтобы иметь несколько версий библиотек и как с ними работать. Предложение Maven действительно многообещающее, но еще не достаточно зрелое, чтобы быть полезным на платформе .NET.

Я думаю, что необходимость менее очевидна, поскольку большинство проектов .NET используют Visual Studio, которая автоматически предлагает / обеспечивает соблюдение структуры каталогов, зависимостей и т. Д. Это «решение», вводящее в заблуждение, поскольку в зависимости от среды IDE подобные соглашения ограничивают гибкость команды разработчиков и ограничивают вас конкретным решением и поставщиком. Очевидно, что в мире Java дело обстоит иначе, отсюда явная потребность в инструменте, подобном Maven.

person Kamiel Wanrooij    schedule 08.04.2009
comment
С другой стороны, мы перешли с NAnt на MSBuild, потому что ручное управление сценарием NAnt - огромная боль. VS сделает это за вас. У меня есть главный файл проекта MSBuild, написанный вручную в редакторе xml, который запускает модульные тесты и т.д. и вызывает другой файл msbuild (сгенерированный VS) только для создания источника. - person Ivan G.; 20.04.2011
comment
Глядя на график участника Github, похоже, что NAnt остановился. Вы все еще рекомендовали бы это? - person Janus Troelsen; 02.08.2016
comment
@JanusTroelsen Я не работал в .NET уже несколько лет ... Я спросил, и самая известная альтернатива - это пакеты NuGet с Paket или просто PowerShell. - person Kamiel Wanrooij; 05.08.2016

Мне не нравятся инструменты сборки на основе XML.

Мы адаптировали рубиновый рейк для создания наших продуктов .net. Albacore - действительно хороший набор задач для создания проектов .net.

Rake позволяет легко создавать даже сложные сценарии сборки, и вы имеете дело с кодом, а не с множеством угловых скобок.

person Zebi    schedule 13.06.2011
comment
Вы все еще пользуетесь этим? Я вижу, что Albacore все еще жив, с только что выпущенной v2.6.0. - person Janus Troelsen; 02.08.2016

Я знаю, что это старый пост, но когда я наткнулся на него, я хотел поделиться другой отличной альтернативой.

Build Automation with PowerShell and Psake  

Многие люди не используют Psake (произносится как «сокей»). По-настоящему круто то, что он использует msbuild.

Хотя это не ответ на вопрос maven (maven возникла из-за потребности в сборках Java, основанных на утомительных подробных сценариях ANT).

Большинство людей не используют CI (непрерывную интеграцию), например Jenkins, Hudson, Cruise Control, TeamCity, TFS, а также не используют PowerShell.

Этот PSake для Powershell, который использует msbuild, делает вещи управляемыми и очень организованными. Вот пример ссылки http://www.shilony.net/2013/06/15/build-automation-with-powershell-and-psake/

person Tom Stickel    schedule 28.10.2013
comment
Мне очень нравится psake как строительный материал. Для управления зависимостями мне бы очень хотелось иметь возможность создавать файлы packages.config из строки nuget.command. Примерно так же, как, например, в скриптах. - person 8DH; 21.11.2013
comment
Да, как только я наткнулся на псаке, я начал рассказывать об этом людям. - person Tom Stickel; 21.11.2013
comment
Вы все еще порекомендовали бы Псаке? - person Janus Troelsen; 02.08.2016
comment
@JanusTroelsen Я не уверен. Наверное, нет, потому что я просто не слышал, чтобы кто-то говорил об этом за последние 3 года. - person Tom Stickel; 02.08.2016
comment
maven возникла из-за потребности в сборках Java, основанных на утомительных многословных сценариях ANT ??? - person Blessed Geek; 10.02.2017
comment
@BlessedGeek - Да, сэр - person Tom Stickel; 11.02.2017
comment
@BlessedGeek - так рада за тебя, что ты девочка 1. Я никогда не говорил, что maven нужны скрипты муравьев 2. Я трансгендер - person Tom Stickel; 13.02.2017

Мы используем UppercuT. UppercuT использует NAnt для сборки, и это безумно простой в использовании Build Framework.

Автоматизированная сборка - это просто: (1) имя решения, (2) путь к системе управления версиями, (3) название компании для большинства проектов!

https://github.com/chucknorris/uppercut

Вот несколько хороших объяснений: UppercuT

Дополнительная информация


UppercuT - это обычная автоматизированная сборка, что означает, что вы настраиваете файл конфигурации, а затем получаете множество функций бесплатно. Пожалуй, самая мощная функция - это возможность указывать настройки среды в ОДНОМ месте и применять их повсюду, включая документацию при сборке исходного кода.

Доступная документация: https://github.com/chucknorris/uppercut/wiki

Функции :

  • Простая установка
  • Простые апгрейды
  • Пользовательские точки расширения (до, после и замены) для каждого шага процесса сборки http://uppercut.pbworks.com/CustomizeUsingExtensionPoints
  • Имеет документацию для интеграции с Team City, CruiseControl.NET и Jenkins (ранее Hudson) https://github.com/chucknorris/uppercut/tree/master/docs
  • Работает в Linux с Mono
  • Управление версиями DLL на основе номера сборки и версий системы управления версиями (SVN, TFS, Git, HG)
  • Компиляция действий - F5 или Ctrl + Shift + B
  • Сильное именование так же просто, как истина / ложь
  • Code Testing and Analysis
    • Testing
      • NUnit
      • MbUnit v2
      • Галлио
      • xUnit
    • NCover
    • NDepend
    • Нитрик
    • Моно анализатор миграции
  • Обфускация
  • ILMerge
  • Создание и создание шаблонов среды (ConfigBuilder, DocBuilder, SQLBuilder, DeploymentBuilder) https://github.com/chucknorris/uppercut/blob/master/docs/ConfigBuilder.doc?raw=true
  • Выходные данные упаковки для подготовки к развертыванию
  • Застежка-молния на выходе
person ferventcoder    schedule 16.05.2009
comment
Что делает это таким простым? Есть ли у него какие-либо ключевые преимущества по сравнению с другими упомянутыми, чтобы сделать его использование более привлекательным? - person Don Vince; 10.06.2011
comment
Дерик Бейли сделал обзор - lostechies.com/derickbailey/2010/05/10/ - person ferventcoder; 13.06.2011
comment
Это упрощает то, что это обычная сборка. Вы устанавливаете конфигурацию, а затем просто запускаете build.bat. Когда в апперкот добавлены новые функции, вы можете обновить его в считанные секунды. - person ferventcoder; 13.06.2011
comment
Hudson все еще существует, Oracle владеет им, но разработчикам не понравилось, как Oracle управляла вещами, и поэтому они создали другое имя дворецкого под названием Jenkins, и, по сути, Jenkins был хорошо принят, и скорость его принятия довольно впечатляющая. - person Tom Stickel; 28.10.2013
comment
Я отредактировал этот пост, чтобы отметить, что UppercuT был заброшен - person Janus Troelsen; 02.08.2016
comment
Привет, исходный код UppercuT перенесен на GitHub, не заброшен. Он имеет некоторую активность, но не так много, что можно добавить / изменить с течением времени. До сих пор активно используется, поэтому не заброшен. - person ferventcoder; 02.08.2016