что такое nuget пакеты
NuGet
Создание пакета NuGet
Пакет NuGet можно создать двумя способами. Мы рекомендуем использовать более новый подход — создавать пакет из проекта в стиле SDK (это файл проекта, содержимое которого начинается с
✔ РЕКОМЕНДУЕТСЯ использовать файл проекта в стиле SDK для создания пакета NuGet.
Зависимости пакетов
Важные метаданные пакета NuGet
Пакет NuGet поддерживает многие свойства метаданных. В следующей таблице собраны основные метаданные, которые должен предоставлять каждый пакет на NuGet.org.
Проект без лицензии по умолчанию получает статус монопольного авторского права, то есть не может законно использоваться другими пользователями.
✔ РЕКОМЕНДУЕТСЯ выбрать имя пакета NuGet с префиксом, который соответствует критериям для резервирования префикса NuGet.
✔️ СЛЕДУЕТ использовать атрибут href для определения HTTPS-ссылки, указывающей на значок пакета.
NuGet.org и другие аналогичные сайты работают с поддержкой HTTPS, поэтому при отображении изображения с другим протоколом появится предупреждение о смешанном типе содержимого.
✔️ СЛЕДУЕТ использовать для значка пакета изображение размером 64 × 64 с прозрачным фоном, чтобы обеспечить оптимальную видимость.
✔ РЕКОМЕНДУЕТСЯ настроить Source Link, чтобы добавить метаданные системы управления версиями в сборки и пакет NuGet.
Source Link автоматически добавляет метаданные RepositoryUrl и RepositoryType в пакет NuGet. Source Link также добавляет сведения о точном исходном коде, из которого создан пакет. Например, к пакету, созданному из репозитория Git, будет добавлен хэш фиксации в качестве метаданных.
Пакеты предварительного выпуска
Пакеты NuGet с суффиксом версии получают статус предварительной версии. По умолчанию в пользовательском интерфейсе диспетчера пакетов NuGet отображаются только стабильные выпуски, если пользователь не согласился использовать пакеты предварительной версии. Благодаря такой политике пакеты предварительной версии предоставляются для тестирования ограниченному числу пользователей.
В пакетах стабильных выпусков нельзя указывать зависимости от пакетов предварительной версии. В таком случае переведите используемый пакет в режим предварительной версии или укажите зависимость от более ранней стабильной версии.
✔️ СЛЕДУЕТ опубликовать пакет в режиме предварительной версии для тестирования, предварительного просмотра или экспериментов.
✔️ СЛЕДУЕТ опубликовать стабильный выпуск пакета, когда он будет полностью готов, чтобы другие стабильные пакеты могли содержать ссылки на него.
Пакеты символов
NuGet.org размещает свой собственный репозиторий сервера символов. Разработчики могут использовать символы, опубликованные на сервере символов NuGet.org, добавив https://symbols.nuget.org/download/symbols в источники символов в Visual Studio.
Сервер символов NuGet.org поддерживает только новые файлы переносимых символов ( *.pdb ), созданные проектами в стиле пакетов SDK.
Альтернатива созданию пакета символов — внедрение файлов символов в главный пакет NuGet. Главный пакет NuGet будет больше, но внедренные файлы символов позволяют разработчикам не настраивать сервер символов NuGet.org. Если вы создаете пакет NuGet из проекта в стиле SDK, файлы символов в него можно внедрить с помощью свойства AllowedOutputExtensionsInPackageBuildOutputFolder :
✔️ РЕКОМЕНДУЕТСЯ опубликовать символы в виде пакета символов ( *.snupkg ) на веб-сайте NuGet.org.
Благодаря пакетам символов ( *.snupkg ) разработчики получают эффективную среду отладки по требованию, причем при этом не увеличивается размер основного пакета и не снижается производительность восстановления в тех случаях, когда отладка пакета NuGet не предполагается.
Вопросы и ответы по NuGet
Часто задаваемые вопросы, относящиеся к NuGet.org, например вопросы об учетных записях NuGet.org, см. в разделе Вопросы и ответы по NuGet.org.
Общие сведения
Что необходимо для запуска NuGet?
Все данные по пользовательскому интерфейсу и средствам командной строки доступны в руководстве по установке.
Поддерживает ли NuGet Mono?
Средство командной строки nuget.exe выполняет построение и запускается с помощью Mono 3.2 или более поздней версии и поддерживает создание пакетов в Mono.
Несмотря на то, что nuget.exe полностью работает в Windows, в Linux и OS X существуют известные проблемы. См. раздел GitHub, посвященный проблемам с Mono.
Графический клиент доступен в виде надстройки для MonoDevelop.
Как можно определить, что содержит пакет, и является ли он стабильным и полезным для моего приложения?
Основным источником информации о пакете является его страница сведений на веб-сайте nuget.org (или в другом закрытом веб-канале). На странице каждого пакета на веб-сайте nuget.org приводится описание проекта, история его версий и статистика использования. В разделе Сведения на странице пакета также приводится ссылка на веб-сайт проекта, где обычно можно найти много примеров и других документов, с помощью которых можно оценить полезность пакета.
Дополнительные сведения см. в разделе Поиск и выбор пакетов.
NuGet в среде Visual Studio
Каким образом обеспечивается поддержка NuGet в различных продуктах Visual Studio?
Как определить точную версию устанавливаемых средств NuGet?
В Visual Studio выберите Справка > О Microsoft Visual Studio и проверьте версию компонента Диспетчер пакетов NuGet.
Какие языки программирования поддерживает NuGet?
Последняя версия NuGet поддерживает C#, Visual Basic, F#, WiX и C++.
Какие шаблоны проектов поддерживает NuGet?
NuGet обеспечивает полную поддержку множества шаблонов проектов, включая Windows, Интернет, облако, SharePoint, Wix и другие.
Как обновить пакеты, которые являются частью шаблонов Visual Studio?
Перейдите на вкладку Обновления в пользовательском интерфейсе диспетчера проектов и выберите Обновить все или воспользуйтесь командой Update-Package в консоли диспетчера проектов.
Чтобы обновить сам шаблон, необходимо вручную обновить репозиторий шаблонов. Дополнительные сведения по этой теме см. в блоге Ксавье Декостера (Xavier Decoster). Обратите внимание, что все это вы делаете на свой страх и риск, поскольку ручное обновление может привести к повреждению шаблона в том случае, если последние версии всех зависимостей несовместимы друг с другом.
Можно ли использовать NuGet вне среды Visual Studio?
Командная строка NuGet
Как получить последнюю версию средства командной строки NuGet?
Для чего нужна лицензия на веб-сайте nuget.exe?
Вы можете распространить nuget.exe в соответствии с условиями лицензии MIT. Вы несете ответственность за обновление и обслуживание всех распространяемых вами копий nuget.exe.
Можно ли расширить возможности средства командной строки NuGet?
Да. Вы можете добавлять в nuget.exe собственные команды, как описывается в статье Роба Рейнолда (Rob Reynold).
Консоль диспетчера пакетов NuGet (Visual Studio для Windows)
Как получить доступ к объекту DTE в консоли диспетчера пакетов?
Это известная проблема, связанная с взаимодействием PowerShell с COM-объектом. Попробуйте выполнить следующие действия:
Get-Interface — это вспомогательная функция, добавляемая узлом PowerShell NuGet.
Создание и публикация пакетов
Как включить мой пакет в веб-канал?
Как настроить свой собственный репозиторий или веб-канал?
Как выполнить массовую загрузку пакетов в мой веб-канал NuGet?
Работа с пакетами
Можно ли устанавливать пакеты NuGet без подключения к Интернету?
Да. См. статью блога Скотта Ханселмана (Scott Hanselman), посвященную доступу к NuGet при неработающем веб-сайте nuget.org или во время полета на самолете (hanselman.com).
Можно ли устанавливать пакеты в папку, отличную от заданной по умолчанию?
Как избежать добавления папки пакетов NuGet в систему управления версиями?
Как отключить восстановление пакетов?
Почему при установке локального пакета с удаленными зависимостями возникает ошибка «Не удается разрешить зависимость»?
При установке локального пакета в проект выберите источник Все. При этом вместо использования одного веб-канала будут объединены все веб-каналы. Причиной этой ошибки обычно является то, что пользователи локального репозитория часто стремятся избежать случайной установки удаленного пакета из-за требований корпоративной политики.
У меня есть несколько проектов, расположенных в одной папке. Как использовать отдельные файлы packages.config для каждого проекта?
Это также не проблема при использовании PackageReference, поскольку каждый файл проекта содержит собственный список зависимостей.
Я не вижу nuget.org в списке репозиториев. Как вернуть его?
/.nuget/NuGet/NuGet.Config (Mac/Linux) и дождитесь, пока NuGet снова создаст его.
Почему после миграции в PackageReference моя сборка стала завершаться ошибкой `This project references NuGet package(s) that are missing on this computer.`?
Краткое руководство. Установка и использование пакета в Visual Studio (только в Windows)
Предварительные требования
Вы можете установить бесплатный выпуск Community 2019 с сайта visualstudio.com либо использовать выпуск Professional или Enterprise.
Создание проекта
Visual Studio создаст проект и откроет его в обозревателе решений.
Добавление пакета NuGet Newtonsoft.Json
Для установки пакета можно использовать диспетчер пакетов NuGet или консоль диспетчера пакетов. При установке пакета NuGet регистрирует зависимость в файле проекта или файле packages.config (в зависимости от формата проекта). Дополнительные сведения см. в разделе Обзор использования пакетов и рабочий процесс.
Диспетчер пакетов NuGet
В обозревателе решений щелкните правой кнопкой мыши узел Ссылки и выберите пункт Управление пакетами NuGet.
Выберите nuget.org в качестве источника пакетов, перейдите на вкладку Обзор, выполните поиск по запросу Newtonsoft.Json, выберите этот пакет в списке и нажмите кнопку Установить.
См. подробнее о диспетчере пакетов NuGet в руководстве по установке пакетов и управлении ими с помощью Visual Studio.
Примите все запросы касательно лицензии.
(Только в Visual Studio 2017.) Если вам будет предложено выбрать формат управления пакетом, выберите PackageReference в файле проекта.
В запросе на проверку изменений нажмите кнопку ОК.
Консоль диспетчера пакетов
Последовательно выберите Сервис > Диспетчер пакетов NuGet > Консоль диспетчера пакетов.
После открытия консоли убедитесь, что в раскрывающемся списке Проект по умолчанию показан проект, в который требуется установить пакет. Если в решении всего лишь один проект, он автоматически выбран.
Введите команду Install-Package Newtonsoft.Json (см. сведения о ней в этой статье). В окне консоли отображаются выходные данные команды. Ошибки обычно означают, что пакет не совместим с целевой платформой проекта.
Использование интерфейса API Newtonsoft.Json в приложении
Добавив пакет Newtonsoft.Json в проект, вы можете вызывать его метод JsonConvert.SerializeObject для преобразования объекта в удобную для восприятия строку.
Откройте файл MainWindow.xaml и замените существующий элемент Grid следующим кодом:
Откройте файл MainWindow.xaml.cs (который находится в обозревателе решений в узле MainWindow.xaml ) и вставьте в класс MainWindow следующий код.
Несмотря на то что вы добавили пакет Newtonsoft.Json в проект, JsonConvert подчеркивается красной волнистой линией, так как оператор using требуется в верхней части файла кода.
Выполните сборку и запустите приложение, нажав клавишу F5 или выбрав команду Отладка > Начать отладку.
Нажмите кнопку. Надпись TextBlock заменится текстом в формате JSON:
Связанные видео
Другие видео о NuGet см. на Channel 9 и YouTube.
Следующие шаги
Поздравляем! Вы установили пакет NuGet и поработали с ним.
См. подробнее о возможностях NuGet по приведенным ниже ссылкам.
Поиск и пробное использование пакетов NuGet для проекта
Поиск пакетов
На nuget.org обратите внимание на кнопку Filter (Фильтр) в правом верхнем углу страницы. После щелчка на панели расширенного поиска раскроется режим сортировки и фильтрации.
Для отображения пакетов определенного типа можно использовать фильтр Package type (Тип пакета).
Для сортировки результатов поиска можно использовать параметр Sort by (Сортировать по):
Можно также использовать синтаксис поиска для фильтрации по тегам, владельцам и идентификаторам пакетов.
Поддерживает ли пакет целевую платформу моего проекта?
NuGet устанавливает пакет в проект только в том случае, если целевая платформа проекта входит в список поддерживаемых пакетом платформ. Если пакет несовместим, NuGet выдает ошибку.
Для некоторых пакетов список поддерживаемых платформ приводится непосредственно в коллекции nuget.org, однако поскольку такие данные не требуются, для многих пакетов эта информация не указывается. В настоящий момент на веб-сайте nuget.org не предусмотрен способ поиска пакетов, поддерживающих конкретную целевую платформу (эта возможность находится на рассмотрении; см. вопрос NuGet 2936).
Однако при необходимости поддерживаемые платформы можно определить другими способами:
Попытайтесь установить пакет в проект, используя команду Install-Package в консоли диспетчера пакетов NuGet. Если пакет несовместим, эта команда выведет список поддерживаемых пакетом платформ.
Пакеты предварительного выпуска
Разработчики пакетов нередко создают предварительные выпуски и бета-версии пакетов, на основании отзывов по которым продолжают улучшать свои предложения.
По умолчанию в результатах поиска на веб-сайте nuget.org отображаются пакеты предварительного выпуска. Чтобы искать только стабильные выпуски, снимите флажок Include prerelease (Включить предварительные выпуски) на панели расширенного поиска, доступном после нажатия кнопки Filter (Фильтр) в правом верхнем углу страницы.
В среде Visual Studio и при работе со средствами интерфейса командной строки dotnet по умолчанию NuGet не включает предварительные версии. Чтобы изменить это поведение, выполните следующие действия:
Пользовательский интерфейс диспетчера пакетов в Visual Studio. В окне Управление пакетами NuGet установите флажок Включить предварительные выпуски. При установке или снятии этого флажка список доступных версий, которые можно установить, в пользовательском интерфейсе диспетчера пакетов обновляется.
Собственные пакеты C++
Пробное использование пакетов
Чтобы оценить пользу пакета, загрузите его и добавьте в код (все пакеты на сайте nuget.org регулярно проверяются на наличие вирусов). В конечном итоге даже самые популярные пакеты в самом начале использовали лишь некоторые разработчики, и вы можете стать одним из первых пользователей возможного будущего хита!
В то же время, используя пакет NuGet, вы полагаетесь на него и должны быть уверены в его надежности и работоспособности. Поскольку установка и непосредственное тестирование пакета занимают определенное время, вы также можете многое узнать о его качестве, используя информацию на странице со сведениями о пакете:
Статистика скачиваний. На странице пакета на веб-сайте nuget.org в разделе Статистика показано общее число скачиваний, число скачиваний последней версии, а также среднее число скачиваний за день. Чем чаще другие разработчики скачивают и используют пакет, тем больше вероятность, что он хорошо зарекомендовал себя на практике.
Used By. На странице пакета в разделе Used By (Кем используется) перечислены пять наиболее популярных пакетов NuGet.org и популярные репозитории GitHub, которые зависят от этого пакета. Пакеты и репозитории, которые зависят от этого пакета, можно назвать зависимыми от него. Зависимые пакеты и репозитории можно рассматривать как признание этого пакета, так как авторы пакетов решили довериться ему настроить зависимость от него.
Зависимый пакет должен зависеть от любой версии этого пакета в своей последней устойчивой версии в списке. Это определение гарантирует, что отображаемые зависимые пакеты являются актуальным отражением решения автора на доверие и зависимость от этого пакета. Зависимости в предварительных версиях не учитываются, так как они еще не считаются искренним признанием. Примеры см. в таблице ниже.
Количество звезд у репозитория GitHub обычно указывает на то, насколько он популярен среди пользователей GitHub (обычно чем больше звезд, тем выше популярность). Дополнительные сведения о звездах и системе ранжирования репозиториев см. на странице, посвященной началу работы с GitHub.
Раздел Used By (Кем используется) для пакета создается автоматически с определенной периодичностью. При этом отдельные репозитории людьми не проверяются и служит этот раздел исключительно в информационных целях для показа пакетов NuGet.org и популярных репозиториев GitHub, зависящих от пакета.
Version History (История версий). На странице пакета в разделе Info (Сведения) можно посмотреть дату последнего обновления, а также ознакомиться с историей версий. Если разработчик обеспечивает эффективное сопровождение пакета, у него будет обширная история версий и недавняя дата обновления. Непопулярные пакеты обновляются редко.
Недавние установки. На странице пакета в разделе Статистика выберите Показать полную статистику. На странице полной статистики будет показано число установок пакета за последние шесть недель по номеру версии. В большинстве случаев лучше предпочесть пакет, который другие разработчики используют более активно.
Поддержка. На странице пакета в разделе Сведения выберите Сайт проекта (если доступен), чтобы просмотреть предоставленные автором варианты поддержки. Как правило, проект с собственным сайтом поддерживается лучше.
История разработчика. На странице пакета в разделе Владельцы можно выбрать владельца пакета и ознакомиться с другими опубликованными им пакетами. Разработчики, в активе которых множество пакетов, с большей долей вероятности продолжат их поддержку в будущем.
Вклад разработчиков открытого исходного кода. Многие пакеты хранятся в репозиториях с открытым исходным кодом, благодаря чему использующие их разработчики могут непосредственно участвовать в устранении ошибок и улучшении их функциональных возможностей. История вклада других разработчиков также является хорошим показателем качества пакета.
Опрос владельцев. Новые разработчики также стремятся к созданию наиболее полезных пакетов, и вы можете помочь им привнести что-то новое в экосистему NuGet. Для этого вы можете связаться напрямую с разработчиком пакета, используя ссылку Связаться с владельцами в разделе Сведения на странице сведений о пакете. Вполне возможно, что они с радостью помогут вам, предложив решение для ваших задач!
Зарезервированные префиксы идентификаторов пакетов: многие владельцы пакета подают заявку и получают зарезервированный префикс идентификатора пакета. Если на сайте nuget.org или в Visual Studio рядом с идентификатором пакета отображается «галочка», это означает, что владелец пакета соответствует критериям резервирования префикса идентификатора. Это означает, что владелец пакета подтвердил свою подлинность и подлинность своих пакетов.
Кроме того, учитывайте условия лицензионного соглашения для пакета, которые можно просмотреть по ссылке Сведения о лицензии на странице сведений о пакете на веб-сайте nuget.org. Если для пакета не заданы условия лицензии, следует обратиться непосредственно к владельцу пакета по ссылке для связи с владельцем на странице пакета. Корпорация Майкрософт не предоставляет вам лицензию на какую-либо интеллектуальную собственность сторонних поставщиков пакетов и не несет ответственность за сведения, предоставляемые третьими лицами.
Устаревание элемента licenseUrl
При переходе от использования элемента licenseUrl к использованию элемента license некоторые клиенты NuGet и веб-каналы NuGet в некоторых случаях могут не отображать сведения о лицензии. Чтобы обеспечить обратную совместимость, URL-адрес лицензии указывает на этот документ с информацией о том, как получить сведения о лицензии в таких случаях.
Если вы попали на эту страницу, щелкнув URL-адрес лицензии в пакете, это значит, что пакет содержит файл лицензии, а также:
Прочесть сведения, содержащиеся в файле лицензии в пакете, можно следующим образом:
Синтаксис поиска
Поиск пакетов NuGet на веб-сайте nuget.org, из интерфейса командной строки NuGet и в расширении «Диспетчер пакетов NuGet» в среде Visual Studio осуществляется одинаково. В общем случае поиск осуществляется по ключевым словам и по описанию пакета.
Visual Studio. Знакомство с NuGet Manager
В этом видеоуроке мы поговорим о таком полезном инструменте, как NuGet Manager, что это такое и для чего он нужен.
Под управлением подразумевается поиск, скачивание, установка, настройка, обновление и удаление файлов сторонних разработчиков у себя в приложении.
Технически NuGet Manager представляет собой расширение для Visual Studio, доступное программисту в процессе работы над своим проектом. Если вы используете «студию» версии 2012 и выше, то NuGet уже заранее предустановлен и готов к работе. В случае версии 2010 его нужно установить вручную. Его можно скачать либо с официального сайта, либо установить напрямую из Visual Studio через менеджер дополнений.
Давайте откроем менеджер. Для этого в Solution Explorer щелкаем правой кнопкой мыши по рабочему проекту и в контекстном меню выбираем пункт «Manage NuGet Packages…»:
NuGet Manager открывается в новой вкладке в текстовом редакторе. Интерфейс у него довольно простой.
Три главные вкладки:
Также в интерфейсе менеджера представлены:
Попробуем установить какую-нибудь библиотеку к нам в проект, например, 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, убирает ссылки на эти библиотеки.
Давайте рассмотрим еще несколько моментов.
Работа в консоли ничем не отличается от работы в графическом интерфейсе, это дело вкуса.
Управление осуществляется посредством специальных команд. Чтобы вывести в консоль список всех доступных команд нужно написать инструкцию:
Команд достаточно много, и описание каждой можно найти в официальной документации на сайте. Вот пример использования наиболее популярных команд.
Добавляем пакет Entity Framework в текущий проект:
Обновляем ранее установленный пакет:
Переустанавливаем ВСЕ пакеты во всех проектах в данном решении:
Вы также можете создать и опубликовать свой собственный пакет в репозиторий nuget.org, тем самым сделав его публичным и доступным через NuGet Manager. Для этого нужно соблюсти ряд правил и условий, а также правильно подготовить свой проект к публикации. Опять же всю информацию об этом можно найти в официальной документации.
Подведем краткий итог. NuGet – это просто незаменимый инструмент для разработчика на сегодняшний день. Он автоматизирует весь процесс работы с пакетами в проекте, а именно поиск, скачивание, установка, настройка, обновление и удаление файлов.
В видео версии этого урока более подробно и наглядно показана работа с этим инструментом.