Upload
andrey-gordienkov
View
270
Download
0
Embed Size (px)
Citation preview
Они не те кем кажутся
Транзитивные зависимости
Гордиенков Андрей
@violettape
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
Контакты
Андрей Гордиенков
@violettape
http://softblog.violet-tape.ru