Upload
getdevnet
View
3.215
Download
2
Embed Size (px)
DESCRIPTION
Управление
Citation preview
Менеджер пакетовNuGet
Андрей КулешовДеловые решения
Зачем городить огород?С каждым месяцем всё больше становится
разнообразных библиотек программного кода – от минимальных до универсальных
Множится их количествоИ каждая из них раз в месяц или в квартал
выпускает обновленную версиюСоответственно, встает новая задача –
централизованное управление множеством разнообразных библиотек, которые использует ваш проект (или проекты)
Пакеты NuGetКому это нужно?
Общедоступная лента NuGet.org – всем, кто пишет OpenSource проекты, и всем, кто использует OpenSource проекты
Частные ленты (сервера) NuGet – компаниям, которые хотят использовать свои внутренние библиотеки более структурировано
Что такое пакет?библиотека .NET, которую кто-то
внимательно и аккуратно подготовил для использования во внешних проектах
А также некоторая конфигурация, которая необходима для использования этой библиотеки
И некоторые подготовительные действия, которые нужны для её использования
И некоторые куски кодаИли - только библиотека. Или – только
конфигурация. Или – только куски кода.
Откуда приходят пакеты?
Nuget.exe
Package Manager Console
Package Manager UI
Кто запрашивает пакет
Кто отдает пакет (package feeds)
http://NuGet.org
\\DevServer\NuGet
https://nuget.mycompany.com/
Кто создает пакет
Собственно, мы.
ДемоУстановка пакета с NuGet
Пакет установлен. Куда?
В корне каждого из проектов внутри солюшена хранится файл packages.config, хранящий имя и точную версию необходимого пакета
Все пакеты, используемые в солюшене, хранятся в папке packages, расположенной в одной директории с файлом солюшена.Каждый пакет хранится в папке вида <имя>.<версия>. Внутри папки находятся распакованные бинарные файлы библиотек и сам файл пакета *.nupkg
Также в этой папке находится файл repositories.config, хранящий относительный путь к конфигурационному файлу пакетов проекта.
Пакет установлен. И что дальше?
Существует два варианта работы с пакетами в системах контроля версий:
- Пакет и его содержимое помещаются в хранилище кода. Преимущество: каждый разработчик, забирая рабочую копию, получает полностью работоспособную копию. Недостаток: может занимать большой объем данных в репозитории, особенно – в случае распределенных файловых систем и в случае многочисленных ветвлений
- Пакеты не помещаются в хранилище кода, помещается лишь информация о необходимых пакетах; сами же пакеты автоматически скачиваются из лент пакетов в момент билда солюшена. Начиная с версии NuGet 1.6, этот сценарий полностью поддерживается «из коробки»
ДемоВосстановление пакетов в NuGet 1.6
Что такое пакет? Вторая серия.Тут сидят программисты, знаете ли.Единый файл для скачивания и хранения -
CoolLibrary.2.0.1.nupkg (но на самом деле это zip)CoolLibrary.nuspec – спецификация пакета (XML)Web.config.transform – преобразование
конфигурационного файла (XSLT-подобное)Каталог lib – скомпилированная библиотека (или
несколько версий библиотеки для разных версий .NET Framework)
Каталог tools – PowerShell-скрипты, выполняемые при установке пакетов
Каталог src – иерархия шаблонов файлов кодаКаталог content – иерархия файлов, копируемых в
целевой проект как есть
Спецификация пакета 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>
Пакет, вид изнутри
NuGet Package Explorer – утилита с пользовательским интерфейсом для просмотра, редактирования и создание NuGet-пакетовhttp://nuget.codeplex.com/releases
Также позволяет открыть любой пакет напрямую из ленты пакетов или опубликовать вновь созданный пакет на NuGet.org
ДемоСоздание пакета с нуля вручную
ДемоСоздание пакета из командной строки
Публикуем наши пакетыПуть для ленивых – подключение пакетов
из папки (локальной или сетевой)
Отправка пакетов на NuGet.org
Регистрируемся на NuGet.orgПолучаем API KeyСохраняем его на нашей машинеОтправляем наш пакет в общую галерею в
один щелчок. (Или в несколько. Или из командной строки, но одной командой. Но все равно – действительно быстро.)
Новая версия пакета доступна в галерее(Все старые версии также по-прежнему доступны)
ДемоУстановка пакета с NuGet
Создание собственной лентыУстанавливается в любой VS-веб-проект как пакет
NuGetNuGet.Server 1.6.1 (на момент написания)
Предоставляет read-only версию ленты пакетов с доступом по http(s)
Разворачиваем получившийся веб-сайт на IISДобавляем новые пакеты в папку Packages внутри
этого сайтаЭти пакеты автоматически попадают в ленту
Можно обеспечить безопасность корпоративной ленты – поддерживается Windows-аутентификация при подключении к ленте, поддерживается https-протокол (только валидные сертификаты!)
ДемоСоздание простого сервера NuGet
Упрощение обновленияМожно централизованно обновлять версию
библиотеки для всего солюшена, а не индивидуально для каждого проекта
При необходимости – автоматическое создание записей перенаправления версий в .config –файлах
(не стоит, однако, думать, что проблема версий решена раз и навсегда. И здесь не обошлось без подводных камней! Например – когда два используемых пакета требуют разных версий третьего пакета)
Разное…
Добавление PowerShell-командв NuGet консоль
Доступность исходников пакетов
Крайне актуально для отладки OpenSource-приложений
Мы имеем возможность не только выгружать на NuGet.org сам пакет, но и автоматически синхронно отправлять исходный код на http://srv.symbolsource.org/pdb/Public
Любой пользователь Visual Studio может подключить этот сервер как хранилище исходных кодов и совершенно прозрачно отлаживать код по загруженным исходникам
Диапазоны версий зависимостей
Начиная с версии 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
Инфраструктурные пакетыWebActivator – пакет, созданный для
облегчения создания других пакетовПомогает внедрять в веб-приложения действия, которые должны выполняться в момент старта или выгрузки приложения
Облегчает создание такого кода за счет того, что он может быть локализован в независимых файлах вместо встраивания в global.asax
Шаблоны VS с зависимостями на пакеты NuGetВведено в версии 1.6
Вопросы?Внимательно слушаю!
Андрей Кулешов«Деловые решения»Директор
[email protected]://www.solforbiz.com
akuleshov.tula
Специально для http://GetDev.NET
Интересное чтение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/
Интересное видеоВ первую очередь:
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