Slide 1

Slide 1 text

.NET Dependency Management with Paket Pedro Félix @pmhsfelix Lisbon, June 24, 2017 70ª Reunião Presencial da Comunidade NetPonto em Lisboa

Slide 2

Slide 2 text

whoami • Professor at the Lisbon Polytechnic Institute – ISEL • Principal Software Engineer role at Sky • Concurrent programming, HTTP APIs, Identity and Access Management • Designing Evolvable Web APIs with ASP.NET, O’Reilly, 2014 See http://webapibook.net/ - freely available in HTML format

Slide 3

Slide 3 text

Motivation • Large .NET solution • Multiple deployable projects (HTTP APIs, services, tools) • > 3 years old • Constantly changing dependencies

Slide 4

Slide 4 text

Motivation • Versioning conflicts • Large commit diff. when a dependency changes • Lack of predictability • Lack of visibility • Runtime issues • Slowness • “Death by a thousand cuts”

Slide 5

Slide 5 text

Alternatives • Paket - https://fsprojects.github.io/Paket/ • Open Source • F# • A full replacement for NuGet? • How does it relates to NuGet? • What are the improvements? • Visual Studio integration?

Slide 6

Slide 6 text

Dependency Management assembly (name, version, deps)

Slide 7

Slide 7 text

Dependency Management assembly (name, version, deps) .csproj

Slide 8

Slide 8 text

Dependency Management assembly (name, version, deps) .csproj manually managed Ad-hoc server build instructions Assembly Source

Slide 9

Slide 9 text

(name, version, deps) package Dependency Management assembly (name, version, deps) .csproj

Slide 10

Slide 10 text

(name, version, deps) package (name, version, deps) package (name, version, deps) package (name, version, deps) package Dependency Management assembly (name, version, deps) .csproj NugGet Server (name, version, deps) package

Slide 11

Slide 11 text

(name, version, deps) package (name, version, deps) package (name, version, deps) package (name, version, deps) package Dependency Management assembly (name, version, deps) .csproj nuget NuGet Server (name, version, deps) package query & fetch protocol

Slide 12

Slide 12 text

(name, version, deps) package (name, version, deps) package (name, version, deps) package (name, version, deps) package Dependency Management assembly (name, version, deps) .csproj nuget NuGet Server (name, version, deps) package query & fetch protocol

Slide 13

Slide 13 text

(name, version, deps) package (name, version, deps) package (name, version, deps) package (name, version, deps) package Dependency Management assembly (name, version, deps) .csproj nuget NuGet Server (name, version, deps) package query & fetch protocol  not in source control

Slide 14

Slide 14 text

(name, version, deps) package (name, version, deps) package (name, version, deps) package (name, version, deps) package Dependency Management assembly (name, version, deps) .csproj nuget NuGet Server (name, version, deps) package query & fetch protocol packages .config  in source control  not in source control

Slide 15

Slide 15 text

(name, version, deps) package (name, version, deps) package (name, version, deps) package (name, version, deps) package Dependency Management assembly (name, version, deps) .csproj nuget NuGet Server (name, version, deps) package query & fetch protocol packages .config per project  in source control  not in source control restore info per-project flat

Slide 16

Slide 16 text

NuGet problems • packages.config is per project • Different versions for the same dependency on the same solution • packages.config is flat • Was a dependency directly or indirectly required? • Why was that version required? • No global view of the dependencies • Package/lib folder contains version number • Potential merge conflict on all .csproj and packages.config • Need to change any script that references the package/lib

Slide 17

Slide 17 text

Dependency graph

Slide 18

Slide 18 text

(name, version, deps) package (name, version, deps) package (name, version, deps) package (name, version, deps) package Dependency Management assembly (name, version, deps) .csproj nuget NuGet Server (name, version, deps) package query & fetch protocol packages .config per project  in source control  not in source control restore info per-project flat

Slide 19

Slide 19 text

(name, version, deps) package (name, version, deps) package (name, version, deps) package (name, version, deps) package Dependency Management assembly (name, version, deps) .csproj paket NuGet Server (name, version, deps) package query & fetch protocol per project  not in source control paket .dependencies root deps version criteria per solution

Slide 20

Slide 20 text

(name, version, deps) package (name, version, deps) package (name, version, deps) package (name, version, deps) package Dependency Management assembly (name, version, deps) .csproj paket NuGet Server (name, version, deps) package query & fetch protocol per project  not in source control paket .dependencies root deps version criteria per solution paket .references per project

Slide 21

Slide 21 text

(name, version, deps) package (name, version, deps) package (name, version, deps) package (name, version, deps) package Dependency Management assembly (name, version, deps) .csproj paket NuGet Server (name, version, deps) package query & fetch protocol per project  not in source control paket .dependencies root deps version criteria per solution paket .references per project paket .lock dependency graph paket generated

Slide 22

Slide 22 text

(name, version, deps) package (name, version, deps) package (name, version, deps) package (name, version, deps) package Dependency Management assembly (name, version, deps) .csproj paket NuGet Server (name, version, deps) package query & fetch protocol per project  not in source control paket .dependencies root deps version criteria per solution paket .references per project paket .lock dependency graph paket generated  source control  source control  source control

Slide 23

Slide 23 text

paket • paket.dependencies – solution scope • Simple text format • Dependency sources • Dependencies and their version criteria • paket.references – project scope • Simple text format • References the used dependencies by name • paket.lock – solution scope • Simple text format • Generated by paket with the complete dependency graph • Source for the restore process

Slide 24

Slide 24 text

DEMO TIME

Slide 25

Slide 25 text

Final remarks • Commands • install, restore, ... • Binding redirect management • Simple text formats • paket.lock • Restore determinism • Dependency visibility

Slide 26

Slide 26 text

Final remarks • Supports multiple Nuget servers • Other sources other than NuGet: HTTP and GitHub • Embrace the command line and simple text formats • Emphasis on dependency management • And just not simply downloading and referencing • Global view of the dependencies • Version control friendly • Less file changes • More informative changes

Slide 27

Slide 27 text

Q&A

Slide 28

Slide 28 text

Patrocinadores “GOLD” Twitter: @PTMicrosoft http://www.microsoft.com/portugal

Slide 29

Slide 29 text

Patrocinadores “Silver”

Slide 30

Slide 30 text

Patrocinadores “Bronze”

Slide 31

Slide 31 text

http://bit.ly/netponto-aval-70 * Para quem não puder preencher durante a reunião, iremos enviar um email com o link à tarde

Slide 32

Slide 32 text

Próximas reuniões presenciais 26/06/2017 – Lisboa 01/07/2017 – Porto 29/07/2017 – Lisboa 23/09/2017 – Lisboa 30/09/2017 – Leiria Reserva estes dias na agenda! :)