transitive dependencies

40
Они не те кем кажутся Транзитивные зависимости Гордиенков Андрей @violettape [email protected] Download presentation how it should be from here

Upload: andrey-gordienkov

Post on 14-Apr-2017

269 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Transitive dependencies

Они не те кем кажутся

Транзитивные зависимости

Гордиенков Андрей

@violettape

[email protected]

Download presentation how it should be

from here

Page 2: Transitive dependencies

Транзитивность

A->B, B->C

A->C

Page 3: Transitive dependencies

Транзитивная зависимость — это тот артефакт, от которого зависит прямая зависимость проекта.

A v1

B v1 C v1 D v2

E v1 D v1

Page 4: Transitive dependencies
Page 5: Transitive dependencies
Page 6: Transitive dependencies

Пакетные менеджеры• Self-contained model (npm)

• Share model (NuGet)

pro

ject

pro

ject

http://stackoverflow.com/questions/4256994/openwrap-vs-nuget

Page 7: Transitive dependencies

naos.deployment.Core

(get-package -list naos.deployment.Core | select -ExpandPropertydependencies) -replace "\:\|","`r`n"

Page 8: Transitive dependencies

NuGet 2.x – Визуальный помощник

Page 9: Transitive dependencies

naos.deployment.Core

Удаление

- RemoveDependencies

Page 10: Transitive dependencies

NuGet Broken by Design• Это просто макрос

• Минимум подтверждений от пользователя• Что устанавливать? По умолчанию последнюю стабильную версию

• Как решать зависимости? Выбрать наименьшую версию удовлетворяющую пакетам. См.п1.

• Какой набор DLL установить? Чтобы лучше всего подходил версии фреймворка проекта

Page 11: Transitive dependencies

PS> Полные права при запуске скриптов

- Возможность запускать любые скрипты• Newtonsoft.JSON запускает браузер

+ Настройка MSBuild

+ Открытие Readme

+ Скаффолдинг

+ Трансформации XML конфигов

PS> next__

Page 12: Transitive dependencies

Тесное переплетение со студией

- Установка пакетов требует студии

- Зависимости указаны в *.csproj

+ Все действия полностью аналогичны ручному процессу

Нет новых концепций

Page 13: Transitive dependencies

Явные минусы

<Reference Include="Dapper, Version=1.40.0.0, Culture=neutral, processorArchitecture=MSIL"><HintPath>..\packages\Dapper.1.42\lib\net45\Dapper.dll</HintPath><Private>True</Private>

<Reference Include="Its.Log, Version=2.7.0.0, Culture=neutral, processorArchitecture=MSIL"><HintPath>..\packages\Its.Log.2.8.3\lib\net40\Its.Log.dll</HintPath><Private>True</Private>

</Reference>

Page 14: Transitive dependencies

Явные минусы

<Reference Include="Dapper, Version=1.40.0.0, Culture=neutral, processorArchitecture=MSIL"><HintPath>..\packages\Dapper.1.42\lib\net45\Dapper.dll</HintPath><Private>True</Private>

<Reference Include="Its.Log, Version=2.7.0.0, Culture=neutral, processorArchitecture=MSIL"><HintPath>..\packages\Its.Log.2.8.3\lib\net40\Its.Log.dll</HintPath><Private>True</Private>

</Reference>

Фиксация версии пакета

Page 15: Transitive dependencies

Явные минусы

<Reference Include="Dapper, Version=1.40.0.0, Culture=neutral, processorArchitecture=MSIL"><HintPath>..\packages\Dapper.1.42\lib\net45\Dapper.dll</HintPath><Private>True</Private>

<Reference Include="Its.Log, Version=2.7.0.0, Culture=neutral, processorArchitecture=MSIL"><HintPath>..\packages\Its.Log.2.8.3\lib\net40\Its.Log.dll</HintPath><Private>True</Private>

</Reference>

Конфликты в csprojпроект

Page 16: Transitive dependencies

Явные минусы

<Reference Include="Dapper, Version=1.40.0.0, Culture=neutral, processorArchitecture=MSIL"><HintPath>..\packages\Dapper.1.42\lib\net45\Dapper.dll</HintPath><Private>True</Private>

<Reference Include="Its.Log, Version=2.7.0.0, Culture=neutral, processorArchitecture=MSIL"><HintPath>..\packages\Its.Log.2.8.3\lib\net40\Its.Log.dll</HintPath><Private>True</Private>

</Reference>

Multi-Homed проектпроекта

Page 17: Transitive dependencies

Явные минусы

<Reference Include="Dapper, Version=1.40.0.0, Culture=neutral, processorArchitecture=MSIL"><HintPath>..\packages\Dapper.1.42\lib\net45\Dapper.dll</HintPath><Private>True</Private>

<Reference Include="Its.Log, Version=2.7.0.0, Culture=neutral, processorArchitecture=MSIL"><HintPath>..\packages\Its.Log.2.8.3\lib\net40\Its.Log.dll</HintPath><Private>True</Private>

</Reference>

Перенаправление проекта

Page 18: Transitive dependencies

Будущее NuGet

• Не трогать *.csproj

• Автоматический ретаргетинг проекта

• Глобальная инсталляция пакетов

• Множественные подключения

• «Плавающие» версии пакетов

• Установка из командной строки (не PS консоль VS)

Page 19: Transitive dependencies

Демо

Page 20: Transitive dependencies

Что же делать?

Page 21: Transitive dependencies

5.3.20 +1-αMajor Minor Patch Qualifier Metadata

Semantic Versioning http://semver.org/lang/ru/

Без обратной совместимости

Новый функционал

Исправление багов

Служебная информация о сборке

Предрелизнаяметка

Обязательная обратная совместимость

Page 22: Transitive dependencies
Page 23: Transitive dependencies

Локальный, проверенный руками репозиторий?

+ Свое родное

+ Безопасные пакеты (…кажется)

- Всё проверять на практике

- Но всё проверить невозможно

- Может быстро устареть

Page 24: Transitive dependencies

NuGet 2.x - Dep Version

<configuration><config><add key="DependencyVersion" value="HighestPatch" />

</config></configuration>

Возможные значения- Lowest: самая ранняя возможная версия- HighestPatch- HighestMinor- Highest: самая последняя версия

Page 25: Transitive dependencies

NuGet 2.x – Визуальный помощник

Page 26: Transitive dependencies
Page 27: Transitive dependencies

NuGet 3.x Визуальный помощник

Page 28: Transitive dependencies

Project.json (> NuGet 3.0)

• https://github.com/aspnet/Home/wiki/Project.json-file

• https://docs.nuget.org/Consume/ProjectJson-Intro

• Только для• Universal Windows Platform

• Portable class libraries

• ASP.NET 5 applications

Page 29: Transitive dependencies

NuGet 3.x

Page 30: Transitive dependencies

Paket

https://github.com/fsprojects/Paket

http://fsprojects.github.io/Paket/

install-package paketpaket initpaket install

Page 31: Transitive dependencies

Можно подключать пакеты NuGet

Можно подключать файлы из GitHub

https://fsprojects.github.io/Paket/github-dependencies.html

Page 32: Transitive dependencies

Принципы работы Paket

Следование принципам SemVer

Неинвазность работы с csproj и работа из консоли

Максимально предсказуемая политика по работе с версиями библиотек.

Page 33: Transitive dependencies

Файлы Paket

• paket.dependencies (.sln)• все зависимости решения

• paket.lock (.sln)• Описание ресурсов

• Описание всех транзитивных зависимостей для каждой сборки индивидуально

• paket.references• Опиание прямых зависимостей (только имена)

Page 34: Transitive dependencies

paket.dependencies

Page 35: Transitive dependencies

paket.lock

Page 36: Transitive dependencies

paket.references

https://fsprojects.github.io/Paket/references-files.html

Page 37: Transitive dependencies

Конвертация

paket convert-from-nugget -f

Page 38: Transitive dependencies

Итого

• Используйте новый NuGet 3.2\Paket

• Для NuGet используйте графический интерфейс

• Используйте политики обновлений для Nuget 2.X

• Следите за зависимостями в проекте

• Следовать SemVer

Page 39: Transitive dependencies

Ссылки• http://stackoverflow.com/questions/4256994/openwrap-vs-nugget

• http://blog.nuget.org/20141010/nuget-is-broken.html

• https://fsprojects.github.io/Paket/

• https://docs.nuget.org/Consume/ProjectJson-Intro

• http://codepyre.com/2012/10/nuget-youre-doing-it-wrong/

• http://habrahabr.ru/company/jugru/blog/191246/ про Maven

• https://github.com/McSherry/libSemVer.NET

Page 40: Transitive dependencies

Контакты

Андрей Гордиенков

[email protected]

@violettape

http://softblog.violet-tape.ru