Что такое NuGet?

Просто о NET | создано: 13.06.2011 | опубликовано: 13.06.2011 | обновлено: 13.01.2024 | просмотров: 44749 | всего комментариев: 2

В статье показано как установить NuGet и что это такое. Показаны примеры управления пакетами NuGet. Достаточно подробно и с картинками.

Если не установлен NuGet

Что такое NuGet не буду подробно рассказывать, разве что пару строк:

Со страниц официального сайта

“NuGet is a Visual Studio extension that makes it easy to install and update open source libraries and tools in Visual Studio.”

А теперь на русском

“Nuget – это одно из расширение Visual Studio, которое позволяет с легкостью устанавливать, обновлять и удалять библиотеки (сборки), компоненты, инструменты.”

Если у Вас не установлен это замечательное расширения для Visual Studio, давайте установим. Запускаем студию, идем в меню: Tools –> Extention Manager. Откроется окно менеджера, в этом окне в левой части выберим Online Gallery, менеджер покажет список доспуных расширений. По идеи, Вы должны сразу увидеть Nuget Package Manager. Но если Вы не увидели его, напишите в строке поиска этого менеджера слово “nuget” и тогда точно перед Вами будет менеджер.

extention_manager

У меня на картинке NuGet Manager отмечен зеленой галкой, которая говорит, что расширение уже установлено. Если Вы нажмете кнопку Install, у Вас появится такой же зеленый значок.

Как установить пакет (способ 1 “Визуальный”)

Я создал просто консольное приложение (просто для демонстрации). В Solution Explorer правой кнопкой мыши нажимаем на Preferences и в меню выбираем пункт Add Library Package references. Этот пункт меню должен появиться после установки менеджера пакетов NuGet.

image

В открывшемся окне, также как и в менеджере расширений для Visual Studio, есть список доступных галерей (слева). Хочу напомнить, что можно получать пакеты как с официального сайта (NuGet official package source), так и папки на своем компьютере, так и с NuGet-сервера локальной сети.

Я в поиске написал свой ник и увидел список доступных пакетов, которые я сделал сам:

image

Допустим, что я хочу в своё консольное приложение добавить несколько классов и наполнить их данными, чтобы поэкспериментировать с LINQ. Я выберу пакет SampleData и нажму Install. После установки пакет отметился зеленой галкой, а в списке сборок проекта появилась сборка SampleData, которая содержит классы и данные для них:

 static void Main(string[] args)
 {
     var people = SampleData.People.GetPeople();
     foreach (SampleData.Person item in people)
     {
         Console.WriteLine(string.Format("User {0} {1} year old (gender {2})",
                item.Name, item.Age, item.Gender));
     }
 }

Если запустить приложение, то я увижу

User Tom 44 year old (gender M)
User Mary 22 year old (gender F)
User Jane 28 year old (gender F)
User Lex 51 year old (gender M)
User Paul 23 year old (gender M)
User Frank 32 year old (gender M)
User Joe 30 year old (gender M)
User John 25 year old (gender M)
User Mark 14 year old (gender M)
User Paula 12 year old (gender F)
User Beth 18 year old (gender F)
User Jack 31 year old (gender M)
User Bob 13 year old (gender M)
User Robert 12 year old (gender M)
User Tony 10 year old (gender M)
User Ray 35 year old (gender M)
Для продолжения нажмите любую клавишу . . .

Как установить NuGet-пакет (способ 2 “Для продвинутых”)

Давайте теперь создадим другое приложение, пусть оно тоже будет консольное. Теперь будем устанавливать Implementation a simple IoC, этот пакет я сделал тоже сам и для себя (но можете тоже пользовать на здоровье). После установки Nuget Package Manager в меню Visual Studio появились новые пункты, например, Tools –> Library Package Manager –> Package Manager Console.

image

Открыв консоль можно писать команды для менеджера:

image

Обратите внимание, что выпадающее окно Package source позволяет выбрать конкретный источник пакетов или использовать все доступные.

Напишу-ка я команду для установки моего пакета с IoC:

Команда NuGetInstall-Package SimpleIoC

Результат работы:

PM> Install-Package SimpleIoC
Successfully installed 'SimpleIoC 0.1.3'.
Successfully added 'SimpleIoC 0.1.3' to ConsoleApplication2.

Пакет установлен. У меня в приложении появился файл SimpleIoC.cs, который является реализацией паттерна IoC (Инверсия в управлении). Кстати, в приложении появился еще одни новый файл packages.config, который, как раз, и содержит информацию об установленных пакетах. У меня в приложении он имеет теперь вид:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="SimpleIoC" version="0.1.3" />
</packages>

Ясно всё и понятно, что отображает этот файл.

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

Хочу отметить некоторую специфику в работе с пакетами. Дело в том, что пакеты это нечто иное, как просто файлы подгруженные к Вашему проекту с учетом некоторых параметров. Например, мой файл SimpleIoC.cs появляется в проекте с учетов namespace. Процесс подмены шаблона используется тот же, что использует Visual Studio, при создании нового проекта из шаблона (или файла из шаблона). Про свойства в таких шаблонах можно почитать хранилище знаний.

NuGet “умеет” добавлять и удалять сборки, файлы, папки, но при одном условии. Если папка, файл или сборка не поменяла название (содержание). Раз уж я установил пакет, то я могу его и удалить:

Команда NuGetUninstall-Package SimpleIoC

Результат предугадать не сложно:

PM> Uninstall-Package SimpleIoC
Successfully removed 'SimpleIoC 0.1.3' from ConsoleApplication2.
Successfully uninstalled 'SimpleIoC 0.1.3'.

Так как у меня больше нет установленных пакетов, файл packages.config исчез из проекта, впрочем как и файл SimpleIoC.cs.

А сейчас небольшой эксперимент. Установлю пакет заново. Теперь я изменю мой SimpleIoC.cs. Например, сделаю из него Singleton и перемещу его в папку Core. Вот теперь удаление пакета будет не таким как в прошлый раз. Сообщение выдано такое же, файл удален, но на самом деле нет – файл остался. Возможно сие поведение будет исправлено в будущих версиях NuGet.

Заключение

В заключение, приведу ссылки

Комментарии к статье (2)

16.10.2014 11:53:18 Shm Что такое NuGet?

А как NuGet дружит с TFS? .т.е. я проинсталировал пакет ХХХ для проекта YYY , положил проект в TFS после check-out  проекта другим участником разработки  что типа maven reimport  надо было например сделать а NuGet'у  что надо сказать чтобы  у всех всё собралось без мануальных Install-package XXX

17.10.2014 18:50:40 Calabonga Что такое NuGet?

Nuget прекрасно дружит с TFS если включить опцию "автоматическое восстановление недостающих сборок"