Зачем нам нужен менеджер пакетов, такой как Nuget?
Я знаю, что диспетчер пакетов, такой как NuGet, помогает нам, когда мы хотим использовать сторонние компоненты.
Со страницы Nuget Codeplex:
NuGet - это бесплатная система управления пакетами, ориентированная на разработчиков с открытым исходным кодом, для платформы.NET, предназначенная для упрощения процесса включения сторонних библиотек в приложение.NET во время разработки.
Существует большое количество полезных сторонних библиотек с открытым исходным кодом для платформы.NET, но для тех, кто не знаком с экосистемой OSS, может быть сложно использовать эти библиотеки в проекте.
Давайте возьмем ELMAH в качестве примера. Это прекрасная утилита регистрации ошибок, которая не зависит от других библиотек, но все еще является проблемой для интеграции в проект. Вот шаги, которые нужно предпринять:
Find ELMAH Download the correct zip package. “Unblock” the package. Verify its hash against the one provided by the hosting environment. Unzip the package contents into a specific location in the solution. Add an assembly reference to the assembly. Update web.config with the correct settings which a developer needs to search for.
И это для библиотеки, которая не имеет зависимостей. Представьте себе, что вы делаете это для NHibernate.Linq, который имеет несколько зависимостей, каждая из которых требует аналогичных шагов. Мы можем сделать намного лучше!
NuGet автоматизирует все эти общие и утомительные задачи для пакета, а также его зависимостей. Это устраняет почти все проблемы включения сторонней библиотеки с открытым исходным кодом в дерево исходных текстов проекта.
Эти шаги - простые задачи, которые мы выполняем, когда хотим настроить проект. это только для автоматизации добавления сторонних компонентов и снижает вероятность ошибки в файлах конфигурации? или у него гораздо больше обязанностей!
2 ответа
Его ценность скрыта под открытым небом: менеджер пакетов, такой как NuGet, помогает вам работать с программными зависимостями с помощью автоматизации. Многие предполагают, что он предназначен только для компонентов с открытым исходным кодом или сторонних компонентов, но вы также можете использовать его для своих внутренних пакетов.
Самое замечательное в NuGet (назвать несколько преимуществ):
- NuGet поощряет повторное использование компонентов, потому что вы неявно полагаетесь на фактические "релизы" (даже если они предварительно выпущены), а не на ветвящиеся источники
- вы можете избавиться от бинарных файлов, вздувающих ваши репозитории VCS (функция восстановления пакетов)
- это заставляет создателей пакета задуматься о том, как пакет будет потребляться, и оставляет их заниматься настройкой компонента во время установки пакета (кто знает, как лучше настроить пакет, чем создатели пакета?). Подумайте об ELMAH в качестве примера.
- Эффективная автоматизация создания и публикации пакетов в репозитории пакетов является формой непрерывной доставки (для программных компонентов). OctopusDeploy делает еще один шаг вперед и позволяет готовить к развертыванию целые веб-сайты.
- NuGet поощряет, а иногда и принуждает вас следовать некоторым лучшим практикам ALM. Например, у пакета есть версия, поэтому вы должны подумать о своей стратегии управления версиями (например, SemVer.org)
- NuGet интегрируется с SymbolSource.org (который также имеет редакцию Community для настройки своих собственных): это позволяет легко отлаживать выпущенные пакеты без необходимости постоянно отправлять эту информацию
- Наличие одного или нескольких репозиториев пакетов позволяет организации легко поддерживать матрицу зависимостей или даже создавать инвентаризацию лицензий OSS, которые используются несколькими проектами.
- NuGet уведомляет вас о доступных обновлениях пакетов
- Создание пакетов заставляет людей задуматься об архитектуре компонентов (все зависимости также должны быть упакованы)
- Зависимости пакета автоматически разрешаются (поэтому вы не можете их забыть)
- NuGet достаточно умен, чтобы добавлять перенаправления привязки сборки при необходимости
Приведенный выше список не является исчерпывающим, но я надеюсь, что я рассмотрел ключевые преимущества в этом ответе. Я уверен, что есть еще.
Ура, Ксавье
Причиной использования NuGet является то, что вам не нужно поставлять все библиотеки в вашем проекте, что уменьшает размер проекта. С помощью NuGet Power Tools, указав версии пакетов в файле Packages.config, вы сможете загрузить все необходимые библиотеки при первом запуске проекта.
Пример из жизни: уменьшенный размер проекта имеет значение при развертывании проекта. Например, если решение имеет 500 МБ кода и 200 МБ размера пакетов, тогда дополнительные 200 МБ действительно стоят каждый раз для загрузки проекта. Вместо загрузки конкретных файлов DLL нам нужно просто установить их ссылку в пакетах. Файл.config.