Как создать nuget пакет visual studio

Обновлено: 07.07.2024

Во время установки пакета, NuGet копирует файлы в проект и автоматически делает необходимые изменения, такие как добавление ссылок и изменение файлов конфигурации app.config или web.config. Если вы решили удалить библиотеку, NuGet удаляет установленные файлы, а также отменяет изменения сделанные при установке, таким образом не остается никакого мусора и беспорядка.

Пакеты NuGet

Все что необходимо для установки библиотеки или инструмента это получить пакет - файл с расширением .nupkg. Пакет содержит файлы для копирования в проект и файл описания содержимого самого пакета, а также описания действий, которые необходимо выполнить при установке или удалении пакета. Пакеты размещаются в фидах(потоках), Visual Studio считывает их и предоставляет разработчику список доступных пакетов. Существует официальный фид, который является источником по умолчанию для NuGet, разработчики могут помещать туда свои пакеты, но можно создавать и свои собственные фиды.

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

NuGet работает во всех версиях Visual Studio 2012, Visual Studio 2010, Visual Web Developer 2010 и Windows Phone Developer Tools 7.1. Найти, установить, удалить или обновить пакеты можно в диалоговом окне Manage Nuget Packages или через командную строку PowerShell в Package Manager Console. Все это встроено в Visual Studio и доступно через главное меню и либо через контекстное меню в Solution Explorer.

Диалог управления пакетами NuGet

На картинке показан диалог управления пакетами NuGet. Вкладка Online показывает все доступные пакеты на официальном фиде.


Командная консоль управления пакетами

Так выглядит Командная консоль управления пакетами.


Поддерживаемые операционные системы

Для PowerShell командлетов (cmdlets) требуется PowerShell 2.0. Поэтому NuGet будет работать на следующих операционных системах:

Это краткое руководство относится только к Visual Studio 2017 для Windows и более поздним версиям. Visual Studio для Mac не поддерживает описанные здесь функции. Используйте вместо этого средства интерфейса командной строки dotnet.

Предварительные требования

Создание проекта библиотеки классов

Щелкните правой кнопкой мыши полученный файл проекта и выберите пункт Сборка, чтобы убедиться, что проект создан правильно. Библиотека DLL находится в папке Debug (или папке Release, если вы используете конфигурацию выпуска для сборки).

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

Настройка свойств проекта для пакета

Пакет NuGet содержит манифест (файл .nuspec ) с соответствующими метаданными, такими как идентификатор пакета, номер версии, описание и многое другое. Некоторые из них могут поступать напрямую из свойств проекта, в результате чего исчезает необходимость изменять их как в проекте, так и в манифесте. Этот раздел описывает, где можно задать соответствующие свойства.

Выберите команду меню Проект > Свойства, а затем щелкните вкладку Приложение.

В поле Имя сборки укажите уникальный идентификатор пакета.

Сведения о сборке в проекте .NET Framework в Visual Studio

Необязательно. Чтобы просмотреть или изменить свойства напрямую, откройте файл Properties/AssemblyInfo.cs в проекте.

Задав свойства, укажите для конфигурацию проекта значение Выпуск и перестройте проект для создания обновленной библиотеки DLL.

Создание начального манифеста

Получив библиотеку DLL и задав свойства проекта, вы можете использовать команду nuget spec , чтобы создать начальный файл .nuspec из проекта. Этот шаг включает в себя соответствующие токены замены для получения сведений из файла проекта.

Запускать nuget spec для создания начального манифеста потребуется всего один раз. При обновлении пакета нужно либо изменить значения в проекте, либо отредактировать сам файл манифеста.

Откройте командную строку и перейдите в папку проекта, содержащую файл AppLogger.csproj .

Выполните следующую команду: nuget spec AppLogger.csproj . После указания проекта NuGet создает манифест с тем же именем, что и проект, в данном случае это AppLogger.nuspec . Он также включает в себя токены замены из манифеста.

Откройте файл AppLogger.nuspec в текстовом редакторе для просмотра его содержимого, которое должно иметь следующий вид.

Изменение манифеста

NuGet выдает ошибку при попытке создать пакет со значениями по умолчанию в вашем файле .nuspec , поэтому перед продолжением нужно изменить следующие поля. Их использование описано в разделе о необязательных элементах метаданных в справочнике по файлу NUSPEC.

  • licenseUrl
  • projectUrl
  • iconUrl
  • releaseNotes
  • теги

Кроме того, сейчас можно добавить в манифест любые другие элементы, как описано в разделе Справочник по файлу NUSPEC.

Сохраните файл, прежде чем продолжить.

Выполнение команды pack

Из командной строки перейдите в папку, содержащую файл .nuspec , и выполните команду nuget pack .

NuGet создает в текущей папке файл .nupkg формата идентификатор-версия.nupkg.

Публикация пакета

Получение ключа API

Выберите свое имя пользователя (в правом верхнем углу), а затем щелкните Ключи API.

После создания ключа выберите Копировать для получения ключа доступа, который требуется в интерфейсе командной строки:

Копирование ключа API в буфер обмена

Важно. Сохраните ключ в безопасном расположении, так как позже вы не сможете скопировать его. Если вы вернетесь на страницу ключа API, вам понадобится повторно создать ключ, чтобы скопировать его. Вы также можете удалить ключ API, если больше не хотите отправлять пакеты через интерфейс командной строки.

Определение области позволяет создавать отдельные ключи API для разных целей. Ключи имеют срок действия. Кроме того, их можно привязать к определенным пакетам (или стандартным маскам). Каждый ключ также привязан к конкретным операциям: отправка новых пакетов и обновлений, отправка только обновлений или удаление из списка. Используя определение области, вы можете создавать ключи API разным пользователям, которые управляют пакетами организации. Это позволит предоставлять им только нужные разрешения. См. подробнее о ключах API в определении области.

Публикация с помощью команды nuget push

Откройте командную строку и перейдите к папке с файлом .nupkg .

Выполните следующую команду, указав имя пакета и заменив значение ключа на ключ API:

nuget.exe отображает результаты публикации:

Ознакомьтесь со сведениями о команде nuget push.

Ошибки публикации

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

Ошибки также возникают при попытке опубликовать пакет с использованием идентификатора, который уже имеется на узле. Например, имя AppLogger уже существует. В этом случае команда push выдает следующую ошибку:

Управление опубликованным пакетом

This package has not been indexed yet. It will appear in search results and will be available for install/restore after indexing is complete (Этот пакет еще не проиндексирован. Он появится в результатах поиска и будет доступен для установки и восстановления после завершения индексирования).

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

Найдите пакет, который требуется исключить из списка, в разделе Published (Опубликованное) и щелкните значок корзины справа:

Значок корзины, отображаемый в списке пакетов на сайте nuget.org

На следующей странице снимите флажок List (package-name) in search results (Вывести (имя пакета) в результатах поиска) и щелкните Save (Сохранить).

Под управлением подразумевается поиск, скачивание, установка, настройка, обновление и удаление файлов сторонних разработчиков у себя в приложении.

Технически NuGet Manager представляет собой расширение для Visual Studio, доступное программисту в процессе работы над своим проектом. Если вы используете «студию» версии 2012 и выше, то NuGet уже заранее предустановлен и готов к работе. В случае версии 2010 его нужно установить вручную. Его можно скачать либо с официального сайта, либо установить напрямую из Visual Studio через менеджер дополнений.

Давайте откроем менеджер. Для этого в Solution Explorer щелкаем правой кнопкой мыши по рабочему проекту и в контекстном меню выбираем пункт «Manage NuGet Packages…»:


NuGet Manager открывается в новой вкладке в текстовом редакторе. Интерфейс у него довольно простой.

Три главные вкладки:

  1. Browse. Найти и установить нужные нам пакеты из хранилища NuGet
  2. Installed. Список уже установленных в нашем проекте библиотек
  3. Updates. Библиотеки в нашем проекте, которые можно обновить до новой версии

Также в интерфейсе менеджера представлены:

  1. Строка поиска. Мы можем искать нужную нам библиотеку, начав вводить ее название
  2. Кнопка «Обновить состояние окна»
  3. Галочка «Включать в выдачу предрелизные версии библиотек», например, какие-то тестовые или экспериментальные
  4. Выпадающий список Package source. В каком месте менеджер будет искать нужные нам библиотеки
  5. Кнопка «Настройки менеджера»
  6. Главная панель с результатами выдачи (слева)
  7. Панель с описанием того компонента, который мы выбрали (справа)


Попробуем установить какую-нибудь библиотеку к нам в проект, например, Entity Framework. Для этого переходим во вкладку Browse и в строке поиска начинаем вводить название нужного пакета. Далее выбираем его из списка и нажимаем кнопку Install. При необходимости можно выбрать определенную версию, отличную от стабильной последней, а также ознакомиться с информацией о данном пакете (авторы, лицензия и т.д.).


В зависимости от устанавливаемого пакета NuGet Manager также определит все его зависимости, или, другими словами, все дополнительные библиотеки, которые требуются устанавливаемому пакету для полноценной работы. В случае с Entity Framework таких зависимостей нет.


Теперь давайте более детально посмотрим, что конкретно сделал менеджер при установке этого компонента в наш проект:
1. Он определил, что для данного пакета нет никаких сторонних зависимостей. Если бы они были, то менеджер автоматически их определил и подтянул.
2. NuGet Manager добавил ссылку на установленный компонент в наш проект (References):


3. NuGet разместил скачанные файлы в специальной папке Packages, которая находится в корневой папке нашего приложения. Это очень удобно, ссылки в проекте теперь идут на эту папку:


4. В конфигурационный файл packages.config была добавлена запись о новом пакете:

5. В конфигурационный файл приложения web.config также были внесены необходимые изменения, чтобы подготовить компонент Entity Framework к работе:

Вот такие операции происходят, когда NuGet Manager добавляет новую библиотеку к нам в проект.

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

Давайте рассмотрим еще несколько моментов.

С NuGet Manager можно работать не только через графический интерфейс, но и через командную строку (консоль). Чтобы ее открыть, идем Tools -> NuGet Package Manager -> Package Manager Console.


Работа в консоли ничем не отличается от работы в графическом интерфейсе, это дело вкуса.

Управление осуществляется посредством специальных команд. Чтобы вывести в консоль список всех доступных команд нужно написать инструкцию:

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

Добавляем пакет Entity Framework в текущий проект:

Обновляем ранее установленный пакет:

Переустанавливаем ВСЕ пакеты во всех проектах в данном решении:

Подведем краткий итог. NuGet – это просто незаменимый инструмент для разработчика на сегодняшний день. Он автоматизирует весь процесс работы с пакетами в проекте, а именно поиск, скачивание, установка, настройка, обновление и удаление файлов.

В видео версии этого урока более подробно и наглядно показана работа с этим инструментом.

В статье показано как установить 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, которая содержит классы и данные для них:

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

Как установить 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

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

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

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

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

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

Читайте также: