transitive dependencies

Post on 14-Apr-2017

270 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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

@violettape

my@violet-tape.net

Download presentation how it should be

from here

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

A->B, B->C

A->C

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

A v1

B v1 C v1 D v2

E v1 D v1

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

• Share model (NuGet)

pro

ject

pro

ject

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

naos.deployment.Core

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

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

naos.deployment.Core

Удаление

- RemoveDependencies

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

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

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

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

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

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

+ Настройка MSBuild

+ Открытие Readme

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

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

PS> next__

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

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

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

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

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

Явные минусы

<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>

Явные минусы

<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>

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

Явные минусы

<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проект

Явные минусы

<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 проектпроекта

Явные минусы

<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>

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

Будущее NuGet

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

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

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

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

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

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

Демо

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

5.3.20 +1-αMajor Minor Patch Qualifier Metadata

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

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

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

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

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

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

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

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

+ Свое родное

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

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

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

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

NuGet 2.x - Dep Version

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

</config></configuration>

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

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

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

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

NuGet 3.x

Paket

https://github.com/fsprojects/Paket

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

install-package paketpaket initpaket install

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

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

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

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

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

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

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

Файлы Paket

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

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

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

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

paket.dependencies

paket.lock

paket.references

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

Конвертация

paket convert-from-nugget -f

Итого

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

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

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

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

• Следовать SemVer

Ссылки• 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

Контакты

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

my@violet-tape.net

@violettape

http://softblog.violet-tape.ru

top related