NuGet использование

Сегодня я хотел бы рассказать о использовании NuGet. Наверняка вы уже что-то слышали об этой системе управления внешними зависимостями. В последнее время система набирает обороты и все больше и больше разработчиков помещают свои системы в обертки для распространения с помощью NuGet.

Итак, NuGet – это менеджер для управления зависимостями от сторонних библиотек. С помощью этого инструмента можно устанавливать, обновлять и убирать зависимости для вашего проекта с большой легкостью. Применимо как для desktop программ, так и для web. В частности при разворачивании CMS Orchard, она половину сборок тащит при установке самостоятельно из библиотеки пакетов. Есть примеры использования NuGet для Silverlight.

Реплики с галерки

При изучении материалов по NuGet, основым плюсом выступает доступность общих библиотек для ваших проектов. Условные противники NuGet, или же принципиальная оппозиция спрашивает, зачем нужен NuGet для своих общих библиотек, если можно существует external для SVN и другие подобные штуки для систем контроля версий? Т.е. можно сослаться на стабильную ветку исходников.

Разработчики NuGet отвечают, что

  • не надо контроллировать доступ к системе контроля версий,
  • исходный код не показывается другим группам,
  • не надо следить и переключаться на другие ревизии вручную (может вы захотели соскочить с ветки Release, на более ранюю, или вы ссылаетесь на ревизию в trunk)

Неплохие плюсы. Тем более что теперь ваша любимая библиотека не затеряется среди репозиториев и проектов.

Установка

Получить менеджер пакетов NuGet можно либо установив себе ASP.NET MVC 3.0, либо скачав его с сайта nuget.codeplex.com. После этого в Visual Studio появится новый пункт меню для просмотра и загрузки пакетов NuGet.

Tools > Library Package Manager > Add Library Package Reference…

Использование

Менеджер пакетов NuGet выглядит достаточно привычно, если вы пользовались менеджером дополнений для самой студии.

Все точно так же. Список доступных пакетов, краткое описание при выделении пакета. На аккордеонной вкладке Online список всех доступных мест, где могут находится пакеты NuGet. Сейчас там только один официальный ресурс, но вы с легкостью можете добавить локальные директории, сетевые директории, свои собственные сетевые хранилища пакетов NuGet.

Установка и обновление пакетов, до безобразия простое – надо просто нажать на кнопку Install\Update при выделении пакета из списка.

Немного стоит сказать про поиск пакетов. У меня в студии поиск переодически пропадает и я пользуюсь поиском на официальном сайте nuget.org. На данный момент там содержится 958 пакетов. Про поиск и установку с помощью консоли расскажу чуть ниже.

Все действия можно осуществлять из консоли менеджера пакетов, которая появляется при установке NuGet в студию.

Действия в консоли осуществляются для определенного проекта, который выбран в качестве DefaultProject. На скриншоте выбран WindowsFormsApplication1, и все пакеты которые я укажу в консоли будут установлены для этого проекта, если проект не указан специально.

Поиск

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

Установка пакетов

Здесь уже указана команда, которую надо выполнить для установки пакета. Копируем текст и вставляем в консоль.

Выполняем команду и получаем все необходимые библиотеки добавленные в проект. При этом будут загружены и установлены все зависимости необходимые для работы выбранного компонента. Так что скорее всего вы не будете в бешенстве от ручного разруливания всех зависимостей. Если конечно автор пакета все верно указал ))

В консоли видно, какие пакеты установились и насколько успешно. После того как все установилось, вы увидите, что среди файлов проекта появился новый элемент packages.config. В этом файле указано, какие пакеты были установлены и какой версии. Общий вид файла таков:

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

 

При этом пакет не будет заново скачан из удаленного ресурса, NuGet достаточно умен и знает, что уже было скачано в рамках текущего программного решения (solution), поэтому он просто добавит ссылку на библиотеку. В консоли вы увидете следующее:

 

К сожалению, пока что нельзя указать при добавлении пакета несколько проектов для интеграции. Общий синтаксис установки выглядит следующим образом:

Install-Package [-Id] <string> [-IgnoreDependencies] [-ProjectName <string>] [-Version <string>] [-Source <string>] [<CommonParameters>]

 

Пакеты скачиваются в корневую директорию программного решения в папку packages, так что не забудьте добавить ее в свою систему контроля версий.

Установленные пакеты можно просмотреть как из менеджера пакетов,

Так и из консоли. Операции по обновлению и удалению так же можно совершать двумя способами. Для менеджера пакетов все кристально ясно, с консолью все чуток сложнее, но и гибче.

Консоль

Основные команды для работы с консолью:

Package – эта команда перечисляет все пакеты установленные для выбранного «по умолчанию» проекта.

PM> package
 
Id                             Version              Description
—                             ——-              ————
structuremap                   2.6.2                StructureMap is a Dependency Injection / Inversion of Control tool for .Net that can be used to improve the architectural qualities of an object ori…
 

UpdatePackage – с помощью этой команды осуществляется обновление установленых пакетов. Для обновления зависимостей в проекте «по умолчанию» необходимо написать

 

Если у вас последняя версия, то NuGet так и скажет:

Полный синтаксис выглядит так:

Update-Package [-Id] <string> [-IgnoreDependencies] [-ProjectName <string>] [-Version <string>] [-Source <string>] [<CommonParameters>]

 

К сожалению нельзя проверить на обновления все пакеты разом и обновить их. Надо операцию обновления проводить для каждого пакета NuGet. Мировое сообщество и закулиса надеятся, что данная возможность появится в одном из ближайших релизов. А пока что, знающие люди написали вот такой скрипт на PowerShell

 

Результат выполнения:

В отзывах к скрипту, люди пишут, что возможна ошибка о «слишком много запросов к ресурсу», так что я вас предупредил.

Uninstall-package – удаление пакета, как не сложно догадаться =)

Результат выполнения:

 

Общий синтаксис команды:

Uninstall-Package [-Id] <string> [-RemoveDependencies] [-Force] [-Version <string>] [<CommonParameters>]

 

Get-help – самая важная команда при работе!

Например:

 

Интересные пакеты

Покопавшись в интернете и посмотрев на примеры, можно сказать что есть следующие интересные пакеты:

  • nUnit – фреймворк для тестирования
  • log4net – богатая библиотека для логирование
  • structureMap – IoC контейнер
  • SqlServerCompact  — 4я версия SQL CE
  • mvcMailer – удобная библиотека для работы с почтой
  • jQuery – просто семейство всяких полезностей при работе из VS2010
  • moq – легковесная библиотека для мокирования объектов

Скорее всего ваша любимая библиотека из мира OpenSource тоже есть в библиотеке NuGet!

 

В следующий раз расскажу как можно самому создавать NuGet пакеты и размещать их в библиотеках.

 

Hard’n’heavy!

Оставить комментарий