SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
Андрей Кулешов
Деловые решения
Зачем городить огород?
 С каждым месяцем всё больше становится
  разнообразных библиотек программного кода – от
  минимальных до универсальных
 Множится их количество
 И каждая из них раз в месяц или в квартал
  выпускает обновленную версию
 Соответственно, встает новая задача –
  централизованное управление множеством
  разнообразных библиотек, которые использует
  ваш проект (или проекты)
Пакеты NuGet
Кому это нужно?
 Общедоступная лента NuGet.org – всем, кто пишет
  OpenSource проекты, и всем, кто использует
  OpenSource проекты
 Частные ленты (сервера) NuGet –
  компаниям, которые хотят использовать свои
  внутренние библиотеки более структурировано
Что такое пакет?
 библиотека .NET, которую кто-то внимательно и
    аккуратно подготовил для использования во
    внешних проектах
   А также некоторая конфигурация, которая
    необходима для использования этой библиотеки
   И некоторые подготовительные действия, которые
    нужны для её использования
   И некоторые куски кода
   Или - только библиотека. Или – только
    конфигурация. Или – только куски кода.
Откуда приходят пакеты?
Кто запрашивает пакет   Кто отдает пакет               Кто создает пакет
                        (package feeds)

          Package
          Manager UI
                              http://NuGet.org
          Package
          Manager
          Console
                            DevServerNuGet
                                                         Собственно,
                                                             мы.

           Nuget.exe
                        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-веб-проект как пакет
  NuGet
NuGet.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.0
empty = latest version.
 Поддержка нестабильных версий ПО – версия пакета
   обозначается тире и произвольной строкой
    1.0.1-alpha
Инфраструктурные пакеты
 WebActivator – пакет, созданный для облегчения
 создания других пакетов
 Помогает внедрять в веб-приложения
 действия, которые должны выполняться в момент
 старта или выгрузки приложения

 Облегчает создание такого кода за счет того, что он
 может быть локализован в независимых файлах
 вместо встраивания в global.asax
Шаблоны VS с зависимостями на
пакеты NuGet
 Введено в версии 1.6
Вопросы?
          Внимательно слушаю! 
                  Андрей Кулешов
                  «Деловые решения»
                  Директор
akuleshov@solforbiz.com            akuleshov.tula
http://www.solforbiz.com


Специально для 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
 По желанию:
  Решение задачи централизованного доступа команды
  разработчиков к компонентам разработки приложений
  с помощью NuGet
  http://www.techdays.ru/videos/3926.html

Mais conteúdo relacionado

Mais procurados

Maven как средство сборки проекта
Maven как средство сборки проектаMaven как средство сборки проекта
Maven как средство сборки проектаYova Stoika
 
Maven 3 : уличная магия
Maven 3 : уличная магияMaven 3 : уличная магия
Maven 3 : уличная магияAleksey Solntsev
 
Введение в Docker
Введение в Docker Введение в Docker
Введение в Docker Andrey Markelov
 
Docker контейнерная революция
Docker контейнерная революцияDocker контейнерная революция
Docker контейнерная революцияGetDev.NET
 
Docker : что это, зачем, и как им пользоваться
Docker : что это, зачем, и как им пользоватьсяDocker : что это, зачем, и как им пользоваться
Docker : что это, зачем, и как им пользоватьсяСергей Ладыгин
 
Запуск тестов с tox и Docker
Запуск тестов с tox и DockerЗапуск тестов с tox и Docker
Запуск тестов с tox и DockerAlexander Koshelev
 
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...MskDotNet Community
 
Стажировка 2015. Разработка. Занятие 7. Работа с серверами
Стажировка 2015. Разработка. Занятие 7. Работа с серверамиСтажировка 2015. Разработка. Занятие 7. Работа с серверами
Стажировка 2015. Разработка. Занятие 7. Работа с серверами7bits
 
Docker - быстро, просто, наглядно
Docker - быстро, просто, наглядноDocker - быстро, просто, наглядно
Docker - быстро, просто, наглядноFallenKain
 
Кратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русскиКратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русскиOSLL
 
My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25Alex Chistyakov
 
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиOleg Nenashev
 
Docker: from understanding to production
Docker: from understanding to productionDocker: from understanding to production
Docker: from understanding to productionAnton Turetsky
 
Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Ruslan Sharipov
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandexaviatakz
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр КолесеньIT Share
 

Mais procurados (20)

Maven как средство сборки проекта
Maven как средство сборки проектаMaven как средство сборки проекта
Maven как средство сборки проекта
 
Maven 3 : уличная магия
Maven 3 : уличная магияMaven 3 : уличная магия
Maven 3 : уличная магия
 
Введение в Docker
Введение в Docker Введение в Docker
Введение в Docker
 
Docker контейнерная революция
Docker контейнерная революцияDocker контейнерная революция
Docker контейнерная революция
 
Docker : что это, зачем, и как им пользоваться
Docker : что это, зачем, и как им пользоватьсяDocker : что это, зачем, и как им пользоваться
Docker : что это, зачем, и как им пользоваться
 
Запуск тестов с tox и Docker
Запуск тестов с tox и DockerЗапуск тестов с tox и Docker
Запуск тестов с tox и Docker
 
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
 
Что такое Docker
Что такое DockerЧто такое Docker
Что такое Docker
 
Стажировка 2015. Разработка. Занятие 7. Работа с серверами
Стажировка 2015. Разработка. Занятие 7. Работа с серверамиСтажировка 2015. Разработка. Занятие 7. Работа с серверами
Стажировка 2015. Разработка. Занятие 7. Работа с серверами
 
Docker - быстро, просто, наглядно
Docker - быстро, просто, наглядноDocker - быстро, просто, наглядно
Docker - быстро, просто, наглядно
 
Кратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русскиКратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русски
 
My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25
 
Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...
 
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
 
Docker. Основы
Docker. ОсновыDocker. Основы
Docker. Основы
 
Docker: from understanding to production
Docker: from understanding to productionDocker: from understanding to production
Docker: from understanding to production
 
Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень
 
openSUSE Build Server от Б до Ю
openSUSE Build Server от Б до ЮopenSUSE Build Server от Б до Ю
openSUSE Build Server от Б до Ю
 

Destaque

Видео в сети
Видео в сетиВидео в сети
Видео в сетиGetDev.NET
 
Reactive Extensions
Reactive ExtensionsReactive Extensions
Reactive ExtensionsGetDev.NET
 
Что нового в Visual Studio 2015
Что нового в Visual Studio 2015Что нового в Visual Studio 2015
Что нового в Visual Studio 2015GetDev.NET
 
C# 5.0. Взгляд в будущее
C# 5.0. Взгляд в будущееC# 5.0. Взгляд в будущее
C# 5.0. Взгляд в будущееGetDev.NET
 
jQuery как путь к RIA
jQuery как путь к RIAjQuery как путь к RIA
jQuery как путь к RIAGetDev.NET
 
PhoneGap для мобильного разработчика - глубокое погружение без ОЗК
PhoneGap для мобильного разработчика - глубокое погружение без ОЗКPhoneGap для мобильного разработчика - глубокое погружение без ОЗК
PhoneGap для мобильного разработчика - глубокое погружение без ОЗКGetDev.NET
 
Workflow Foundation
Workflow FoundationWorkflow Foundation
Workflow FoundationGetDev.NET
 
XAML - язык разметки приложений
XAML - язык разметки приложенийXAML - язык разметки приложений
XAML - язык разметки приложенийGetDev.NET
 
Introduction to Azure AppFabric
Introduction to Azure AppFabricIntroduction to Azure AppFabric
Introduction to Azure AppFabricGetDev.NET
 
Windows communication foundation 4
Windows communication foundation 4Windows communication foundation 4
Windows communication foundation 4GetDev.NET
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCGetDev.NET
 
NoSQL databases and CouchDB
NoSQL databases and CouchDBNoSQL databases and CouchDB
NoSQL databases and CouchDBGetDev.NET
 
Async Javascript
Async JavascriptAsync Javascript
Async JavascriptGetDev.NET
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language RuntimeGetDev.NET
 
Lego Mindstorms
Lego MindstormsLego Mindstorms
Lego MindstormsGetDev.NET
 
Windows Azure platform
Windows Azure platformWindows Azure platform
Windows Azure platformGetDev.NET
 

Destaque (20)

Видео в сети
Видео в сетиВидео в сети
Видео в сети
 
Reactive Extensions
Reactive ExtensionsReactive Extensions
Reactive Extensions
 
Erlang
ErlangErlang
Erlang
 
Что нового в Visual Studio 2015
Что нового в Visual Studio 2015Что нового в Visual Studio 2015
Что нового в Visual Studio 2015
 
C# 5.0. Взгляд в будущее
C# 5.0. Взгляд в будущееC# 5.0. Взгляд в будущее
C# 5.0. Взгляд в будущее
 
jQuery как путь к RIA
jQuery как путь к RIAjQuery как путь к RIA
jQuery как путь к RIA
 
PhoneGap для мобильного разработчика - глубокое погружение без ОЗК
PhoneGap для мобильного разработчика - глубокое погружение без ОЗКPhoneGap для мобильного разработчика - глубокое погружение без ОЗК
PhoneGap для мобильного разработчика - глубокое погружение без ОЗК
 
WinRT
WinRTWinRT
WinRT
 
ASP.NET MVC 4
ASP.NET MVC 4ASP.NET MVC 4
ASP.NET MVC 4
 
Workflow Foundation
Workflow FoundationWorkflow Foundation
Workflow Foundation
 
Kh21345
Kh21345Kh21345
Kh21345
 
XAML - язык разметки приложений
XAML - язык разметки приложенийXAML - язык разметки приложений
XAML - язык разметки приложений
 
Introduction to Azure AppFabric
Introduction to Azure AppFabricIntroduction to Azure AppFabric
Introduction to Azure AppFabric
 
Windows communication foundation 4
Windows communication foundation 4Windows communication foundation 4
Windows communication foundation 4
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
 
NoSQL databases and CouchDB
NoSQL databases and CouchDBNoSQL databases and CouchDB
NoSQL databases and CouchDB
 
Async Javascript
Async JavascriptAsync Javascript
Async Javascript
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
 
Lego Mindstorms
Lego MindstormsLego Mindstorms
Lego Mindstorms
 
Windows Azure platform
Windows Azure platformWindows Azure platform
Windows Azure platform
 

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

C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.Igor Shkulipa
 
системы сборок проектов
системы сборок проектовсистемы сборок проектов
системы сборок проектовRomero78
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Fedor Lavrentyev
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктуройdddpaul
 
Dmitriy Pasko_NuGet - package management for .NET
Dmitriy Pasko_NuGet - package management for .NETDmitriy Pasko_NuGet - package management for .NET
Dmitriy Pasko_NuGet - package management for .NETCiklum
 
NuGet - package management for .NET
NuGet - package management for .NETNuGet - package management for .NET
NuGet - package management for .NETDima Pasko
 
Web deployment
Web deploymentWeb deployment
Web deploymentGetDev.NET
 
Webpack для самых маленьких | Odessa Frontend Meetup #5
Webpack для самых маленьких | Odessa Frontend Meetup #5Webpack для самых маленьких | Odessa Frontend Meetup #5
Webpack для самых маленьких | Odessa Frontend Meetup #5OdessaFrontend
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word pressvovasik
 
What do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScriptWhat do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScriptVasiliy Teliatnikov
 
инструментарий
инструментарийинструментарий
инструментарийigdweb
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansmetaform
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыOleg Nenashev
 
системы контроля версий
системы контроля версийсистемы контроля версий
системы контроля версийNicki Feathers
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Vladimir Bakhov
 
Как Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QAКак Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QASQALab
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in productionAnatoly Popov
 

Semelhante a Менеджер пакетов NuGet (20)

C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
 
системы сборок проектов
системы сборок проектовсистемы сборок проектов
системы сборок проектов
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
Dmitriy Pasko_NuGet - package management for .NET
Dmitriy Pasko_NuGet - package management for .NETDmitriy Pasko_NuGet - package management for .NET
Dmitriy Pasko_NuGet - package management for .NET
 
NuGet - package management for .NET
NuGet - package management for .NETNuGet - package management for .NET
NuGet - package management for .NET
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
Webpack для самых маленьких | Odessa Frontend Meetup #5
Webpack для самых маленьких | Odessa Frontend Meetup #5Webpack для самых маленьких | Odessa Frontend Meetup #5
Webpack для самых маленьких | Odessa Frontend Meetup #5
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word press
 
What do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScriptWhat do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScript
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
 
Instalarea DSpace
Instalarea DSpaceInstalarea DSpace
Instalarea DSpace
 
инструментарий
инструментарийинструментарий
инструментарий
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeans
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
 
системы контроля версий
системы контроля версийсистемы контроля версий
системы контроля версий
 
Node.js (RichClient)
 Node.js (RichClient) Node.js (RichClient)
Node.js (RichClient)
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
 
Как Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QAКак Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QA
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 

Mais de GetDev.NET

Leap Motion - игрушка с заделом на будущее
Leap Motion - игрушка с заделом на будущееLeap Motion - игрушка с заделом на будущее
Leap Motion - игрушка с заделом на будущееGetDev.NET
 
Гирлянда для программистов
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистовGetDev.NET
 
Mind Mapping, или как заставить свой мозг работать лучше
Mind Mapping, или как заставить свой мозг работать лучшеMind Mapping, или как заставить свой мозг работать лучше
Mind Mapping, или как заставить свой мозг работать лучшеGetDev.NET
 
Windows 10 для пользователей и разработчиков
Windows 10 для пользователей и разработчиковWindows 10 для пользователей и разработчиков
Windows 10 для пользователей и разработчиковGetDev.NET
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web APIGetDev.NET
 
Что нового в Visual Studio 2013
Что нового в Visual Studio 2013Что нового в Visual Studio 2013
Что нового в Visual Studio 2013GetDev.NET
 
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...GetDev.NET
 
Особенности мобильной платформы Windows Phone 8
Особенности мобильной платформы Windows Phone 8Особенности мобильной платформы Windows Phone 8
Особенности мобильной платформы Windows Phone 8GetDev.NET
 
JavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработкиJavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработкиGetDev.NET
 
Roslyn - компилятор как сервис
Roslyn - компилятор как сервисRoslyn - компилятор как сервис
Roslyn - компилятор как сервисGetDev.NET
 
Обзор рекомендаций W3C
Обзор рекомендаций W3CОбзор рекомендаций W3C
Обзор рекомендаций W3CGetDev.NET
 
Первое знакомство с MODx revolution
Первое знакомство с MODx revolutionПервое знакомство с MODx revolution
Первое знакомство с MODx revolutionGetDev.NET
 
Dependency injection
Dependency injectionDependency injection
Dependency injectionGetDev.NET
 
Microsoft NUI - Surface
Microsoft NUI - SurfaceMicrosoft NUI - Surface
Microsoft NUI - SurfaceGetDev.NET
 

Mais de GetDev.NET (18)

Go
GoGo
Go
 
Leap Motion - игрушка с заделом на будущее
Leap Motion - игрушка с заделом на будущееLeap Motion - игрушка с заделом на будущее
Leap Motion - игрушка с заделом на будущее
 
Гирлянда для программистов
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистов
 
Mind Mapping, или как заставить свой мозг работать лучше
Mind Mapping, или как заставить свой мозг работать лучшеMind Mapping, или как заставить свой мозг работать лучше
Mind Mapping, или как заставить свой мозг работать лучше
 
Windows 10 для пользователей и разработчиков
Windows 10 для пользователей и разработчиковWindows 10 для пользователей и разработчиков
Windows 10 для пользователей и разработчиков
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
 
Что нового в Visual Studio 2013
Что нового в Visual Studio 2013Что нового в Visual Studio 2013
Что нового в Visual Studio 2013
 
AngularJS
AngularJSAngularJS
AngularJS
 
TypeScript
TypeScriptTypeScript
TypeScript
 
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
 
Особенности мобильной платформы Windows Phone 8
Особенности мобильной платформы Windows Phone 8Особенности мобильной платформы Windows Phone 8
Особенности мобильной платформы Windows Phone 8
 
JavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработкиJavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработки
 
Roslyn - компилятор как сервис
Roslyn - компилятор как сервисRoslyn - компилятор как сервис
Roslyn - компилятор как сервис
 
Обзор рекомендаций W3C
Обзор рекомендаций W3CОбзор рекомендаций W3C
Обзор рекомендаций W3C
 
PowerShell
PowerShellPowerShell
PowerShell
 
Первое знакомство с MODx revolution
Первое знакомство с MODx revolutionПервое знакомство с MODx revolution
Первое знакомство с MODx revolution
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
Microsoft NUI - Surface
Microsoft NUI - SurfaceMicrosoft NUI - Surface
Microsoft NUI - Surface
 

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

  • 2. Зачем городить огород?  С каждым месяцем всё больше становится разнообразных библиотек программного кода – от минимальных до универсальных  Множится их количество  И каждая из них раз в месяц или в квартал выпускает обновленную версию  Соответственно, встает новая задача – централизованное управление множеством разнообразных библиотек, которые использует ваш проект (или проекты)
  • 3. Пакеты NuGet Кому это нужно?  Общедоступная лента NuGet.org – всем, кто пишет OpenSource проекты, и всем, кто использует OpenSource проекты  Частные ленты (сервера) NuGet – компаниям, которые хотят использовать свои внутренние библиотеки более структурировано
  • 4. Что такое пакет?  библиотека .NET, которую кто-то внимательно и аккуратно подготовил для использования во внешних проектах  А также некоторая конфигурация, которая необходима для использования этой библиотеки  И некоторые подготовительные действия, которые нужны для её использования  И некоторые куски кода  Или - только библиотека. Или – только конфигурация. Или – только куски кода.
  • 5. Откуда приходят пакеты? Кто запрашивает пакет Кто отдает пакет Кто создает пакет (package feeds) Package Manager UI http://NuGet.org Package Manager Console DevServerNuGet Собственно, мы. Nuget.exe https://nuget.mycompany.com/
  • 7. Пакет установлен. Куда?  В корне каждого из проектов внутри солюшена хранится файл packages.config, хранящий имя и точную версию необходимого пакета  Все пакеты, используемые в солюшене, хранятся в папке packages, расположенной в одной директории с файлом солюшена. Каждый пакет хранится в папке вида <имя>.<версия>. Внутри папки находятся распакованные бинарные файлы библиотек и сам файл пакета *.nupkg  Также в этой папке находится файл repositories.config, хранящий относительный путь к конфигурационному файлу пакетов проекта.
  • 8. Пакет установлен. И что дальше? Существует два варианта работы с пакетами в системах контроля версий: - Пакет и его содержимое помещаются в хранилище кода. Преимущество: каждый разработчик, забирая рабочую копию, получает полностью работоспособную копию. Недостаток: может занимать большой объем данных в репозитории, особенно – в случае распределенных файловых систем и в случае многочисленных ветвлений - Пакеты не помещаются в хранилище кода, помещается лишь информация о необходимых пакетах; сами же пакеты автоматически скачиваются из лент пакетов в момент билда солюшена. Начиная с версии NuGet 1.6, этот сценарий полностью поддерживается «из коробки»
  • 10. Что такое пакет? Вторая серия. Тут сидят программисты, знаете ли.  Единый файл для скачивания и хранения - CoolLibrary.2.0.1.nupkg (но на самом деле это zip)  CoolLibrary.nuspec – спецификация пакета (XML)  Web.config.transform – преобразование конфигурационного файла (XSLT-подобное)  Каталог lib – скомпилированная библиотека (или несколько версий библиотеки для разных версий .NET Framework)  Каталог tools – PowerShell-скрипты, выполняемые при установке пакетов  Каталог src – иерархия шаблонов файлов кода  Каталог content – иерархия файлов, копируемых в целевой проект как есть
  • 11. Спецификация пакета 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>
  • 12. Пакет, вид изнутри  NuGet Package Explorer – утилита с пользовательским интерфейсом для просмотра, редактирования и создание NuGet-пакетов http://nuget.codeplex.com/releases  Также позволяет открыть любой пакет напрямую из ленты пакетов или опубликовать вновь созданный пакет на NuGet.org
  • 13. Демо Создание пакета с нуля вручную
  • 14. Демо Создание пакета из командной строки
  • 15. Публикуем наши пакеты  Путь для ленивых – подключение пакетов из папки (локальной или сетевой)
  • 16. Отправка пакетов на NuGet.org  Регистрируемся на NuGet.org  Получаем API Key  Сохраняем его на нашей машине  Отправляем наш пакет в общую галерею в один щелчок. (Или в несколько. Или из командной строки, но одной командой. Но все равно – действительно быстро.)  Новая версия пакета доступна в галерее (Все старые версии также по-прежнему доступны)
  • 18. Создание собственной ленты  Устанавливается в любой VS-веб-проект как пакет NuGet NuGet.Server 1.6.1 (на момент написания) Предоставляет read-only версию ленты пакетов с доступом по http(s)  Разворачиваем получившийся веб-сайт на IIS  Добавляем новые пакеты в папку Packages внутри этого сайта Эти пакеты автоматически попадают в ленту  Можно обеспечить безопасность корпоративной ленты – поддерживается Windows-аутентификация при подключении к ленте, поддерживается https-протокол (только валидные сертификаты!)
  • 20. Упрощение обновления  Можно централизованно обновлять версию библиотеки для всего солюшена, а не индивидуально для каждого проекта  При необходимости – автоматическое создание записей перенаправления версий в .config –файлах  (не стоит, однако, думать, что проблема версий решена раз и навсегда. И здесь не обошлось без подводных камней! Например – когда два используемых пакета требуют разных версий третьего пакета)
  • 23. Доступность исходников пакетов  Крайне актуально для отладки OpenSource- приложений  Мы имеем возможность не только выгружать на NuGet.org сам пакет, но и автоматически синхронно отправлять исходный код на http://srv.symbolsource.org/pdb/Public  Любой пользователь Visual Studio может подключить этот сервер как хранилище исходных кодов и совершенно прозрачно отлаживать код по загруженным исходникам
  • 24. Диапазоны версий зависимостей  Начиная с версии 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.0 empty = latest version.  Поддержка нестабильных версий ПО – версия пакета обозначается тире и произвольной строкой 1.0.1-alpha
  • 25. Инфраструктурные пакеты  WebActivator – пакет, созданный для облегчения создания других пакетов Помогает внедрять в веб-приложения действия, которые должны выполняться в момент старта или выгрузки приложения Облегчает создание такого кода за счет того, что он может быть локализован в независимых файлах вместо встраивания в global.asax
  • 26. Шаблоны VS с зависимостями на пакеты NuGet  Введено в версии 1.6
  • 27. Вопросы? Внимательно слушаю!  Андрей Кулешов «Деловые решения» Директор akuleshov@solforbiz.com akuleshov.tula http://www.solforbiz.com Специально для http://GetDev.NET
  • 28. Интересное чтение  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/
  • 29. Интересное видео  В первую очередь: 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  По желанию: Решение задачи централизованного доступа команды разработчиков к компонентам разработки приложений с помощью NuGet http://www.techdays.ru/videos/3926.html