29
Менеджер пакетов NuGet Андрей Кулешов Деловые решения

Менеджер пакетов NuGet

Embed Size (px)

DESCRIPTION

Управление

Citation preview

Page 1: Менеджер пакетов NuGet

Менеджер пакетовNuGet

Андрей КулешовДеловые решения

Page 2: Менеджер пакетов NuGet

Зачем городить огород?С каждым месяцем всё больше становится

разнообразных библиотек программного кода – от минимальных до универсальных

Множится их количествоИ каждая из них раз в месяц или в квартал

выпускает обновленную версиюСоответственно, встает новая задача –

централизованное управление множеством разнообразных библиотек, которые использует ваш проект (или проекты)

Page 3: Менеджер пакетов NuGet

Пакеты NuGetКому это нужно?

Общедоступная лента NuGet.org – всем, кто пишет OpenSource проекты, и всем, кто использует OpenSource проекты

Частные ленты (сервера) NuGet – компаниям, которые хотят использовать свои внутренние библиотеки более структурировано

Page 4: Менеджер пакетов NuGet

Что такое пакет?библиотека .NET, которую кто-то

внимательно и аккуратно подготовил для использования во внешних проектах

А также некоторая конфигурация, которая необходима для использования этой библиотеки

И некоторые подготовительные действия, которые нужны для её использования

И некоторые куски кодаИли - только библиотека. Или – только

конфигурация. Или – только куски кода.

Page 5: Менеджер пакетов NuGet

Откуда приходят пакеты?

Nuget.exe

Package Manager Console

Package Manager UI

Кто запрашивает пакет

Кто отдает пакет (package feeds)

http://NuGet.org

\\DevServer\NuGet

https://nuget.mycompany.com/

Кто создает пакет

Собственно, мы.

Page 6: Менеджер пакетов NuGet

ДемоУстановка пакета с NuGet

Page 7: Менеджер пакетов NuGet

Пакет установлен. Куда?

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

Все пакеты, используемые в солюшене, хранятся в папке packages, расположенной в одной директории с файлом солюшена.Каждый пакет хранится в папке вида <имя>.<версия>. Внутри папки находятся распакованные бинарные файлы библиотек и сам файл пакета *.nupkg

Также в этой папке находится файл repositories.config, хранящий относительный путь к конфигурационному файлу пакетов проекта.

Page 8: Менеджер пакетов NuGet

Пакет установлен. И что дальше?

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

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

- Пакеты не помещаются в хранилище кода, помещается лишь информация о необходимых пакетах; сами же пакеты автоматически скачиваются из лент пакетов в момент билда солюшена. Начиная с версии NuGet 1.6, этот сценарий полностью поддерживается «из коробки»

Page 9: Менеджер пакетов NuGet

ДемоВосстановление пакетов в NuGet 1.6

Page 10: Менеджер пакетов NuGet

Что такое пакет? Вторая серия.Тут сидят программисты, знаете ли.Единый файл для скачивания и хранения -

CoolLibrary.2.0.1.nupkg (но на самом деле это zip)CoolLibrary.nuspec – спецификация пакета (XML)Web.config.transform – преобразование

конфигурационного файла (XSLT-подобное)Каталог lib – скомпилированная библиотека (или

несколько версий библиотеки для разных версий .NET Framework)

Каталог tools – PowerShell-скрипты, выполняемые при установке пакетов

Каталог src – иерархия шаблонов файлов кодаКаталог content – иерархия файлов, копируемых в

целевой проект как есть

Page 11: Менеджер пакетов NuGet

Спецификация пакета nuspec

<?xml version="1.0"?><package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> <metadata> <id>Castle.Windsor</id> <version>2.5.4</version> <title>Castle.Windsor</title> <authors>Castle Project Contributors</authors> <owners /> <licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl> <projectUrl>http://docs.castleproject.org/Windsor.MainPage.ashx</projectUrl> <iconUrl>http://www.castleproject.org/images/wc_logo32.png</iconUrl> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>Castle Windsor is best of breed, mature Inversion of Control container

available for .NET and Silverlight.</description> <summary>Castle Windsor is best of breed, mature Inversion of Control container

available for .NET and Silverlight.</summary> <tags>castle windsor inversionOfControl DependencyInjection</tags> <dependencies> <dependency id="Castle.Core" version="2.5.2" /> </dependencies> </metadata></package>

Page 12: Менеджер пакетов NuGet

Пакет, вид изнутри

NuGet Package Explorer – утилита с пользовательским интерфейсом для просмотра, редактирования и создание NuGet-пакетовhttp://nuget.codeplex.com/releases

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

Page 13: Менеджер пакетов NuGet

ДемоСоздание пакета с нуля вручную

Page 14: Менеджер пакетов NuGet

ДемоСоздание пакета из командной строки

Page 15: Менеджер пакетов NuGet

Публикуем наши пакетыПуть для ленивых – подключение пакетов

из папки (локальной или сетевой)

Page 16: Менеджер пакетов NuGet

Отправка пакетов на NuGet.org

Регистрируемся на NuGet.orgПолучаем API KeyСохраняем его на нашей машинеОтправляем наш пакет в общую галерею в

один щелчок. (Или в несколько. Или из командной строки, но одной командой. Но все равно – действительно быстро.)

Новая версия пакета доступна в галерее(Все старые версии также по-прежнему доступны)

Page 17: Менеджер пакетов NuGet

ДемоУстановка пакета с NuGet

Page 18: Менеджер пакетов NuGet

Создание собственной лентыУстанавливается в любой VS-веб-проект как пакет

NuGetNuGet.Server 1.6.1 (на момент написания)

Предоставляет read-only версию ленты пакетов с доступом по http(s)

Разворачиваем получившийся веб-сайт на IISДобавляем новые пакеты в папку Packages внутри

этого сайтаЭти пакеты автоматически попадают в ленту

Можно обеспечить безопасность корпоративной ленты – поддерживается Windows-аутентификация при подключении к ленте, поддерживается https-протокол (только валидные сертификаты!)

Page 19: Менеджер пакетов NuGet

ДемоСоздание простого сервера NuGet

Page 20: Менеджер пакетов NuGet

Упрощение обновленияМожно централизованно обновлять версию

библиотеки для всего солюшена, а не индивидуально для каждого проекта

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

(не стоит, однако, думать, что проблема версий решена раз и навсегда. И здесь не обошлось без подводных камней! Например – когда два используемых пакета требуют разных версий третьего пакета)

Page 21: Менеджер пакетов NuGet

Разное…

Page 22: Менеджер пакетов NuGet

Добавление PowerShell-командв NuGet консоль

Page 23: Менеджер пакетов NuGet

Доступность исходников пакетов

Крайне актуально для отладки OpenSource-приложений

Мы имеем возможность не только выгружать на NuGet.org сам пакет, но и автоматически синхронно отправлять исходный код на http://srv.symbolsource.org/pdb/Public

Любой пользователь Visual Studio может подключить этот сервер как хранилище исходных кодов и совершенно прозрачно отлаживать код по загруженным исходникам

Page 24: Менеджер пакетов NuGet

Диапазоны версий зависимостей

Начиная с версии 1.6, можно указывать как точные версии пакетов, от которых зависит ваш пакет, так и диапазоны.

1.0 = 1.0 ≤ x(,1.0] = x ≤ 1.0(,1.0) = x < 1.0[1.0] = x == 1.0(1.0) = invalid(1.0,) = 1.0 < x(1.0,2.0) = 1.0 < x < 2.0[1.0,2.0] = 1.0 ≤ x ≤ 2.0empty = latest version. Поддержка нестабильных версий ПО – версия пакета

обозначается тире и произвольной строкой 1.0.1-alpha

Page 25: Менеджер пакетов NuGet

Инфраструктурные пакетыWebActivator – пакет, созданный для

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

Облегчает создание такого кода за счет того, что он может быть локализован в независимых файлах вместо встраивания в global.asax

Page 26: Менеджер пакетов NuGet

Шаблоны VS с зависимостями на пакеты NuGetВведено в версии 1.6

Page 27: Менеджер пакетов NuGet

Вопросы?Внимательно слушаю!

Андрей Кулешов«Деловые решения»Директор

[email protected]://www.solforbiz.com

akuleshov.tula

Специально для http://GetDev.NET

Page 28: Менеджер пакетов NuGet

Интересное чтениеNuGet Docs

http://docs.nuget.org/Дэвид Эббо – блог разработчика NuGet

http://blog.davidebbo.com/Tips for building Nuget packages

http://lostechies.com/joshuaflanagan/2011/06/23/tips-for-building-nuget-packages/

Page 29: Менеджер пакетов NuGet

Интересное видеоВ первую очередь:

NuGet In Depth: Empowering Open Source on the .NET Platform http://channel9.msdn.com/Events/MIX/MIX11/FRM09

Во вторую очередь:Всё, перечисленное на:http://docs.nuget.org/docs/start-here/videos

По желанию:Решение задачи централизованного доступа команды разработчиков к компонентам разработки приложений с помощью NuGethttp://www.techdays.ru/videos/3926.html