SlideShare a Scribd company logo
1 of 30
Controlling 
Component Chaos 
with NuGet and 
Versioning 
by John Williston 
Perforce Software
John Williston 
Perforce Software 
Controlling Component Chaos 
with NuGet and Versioning
Agenda 
• NuGet overview 
• Consuming components 
• Producing components 
• Gotchas and Q&A 
Controlling Component Chaos 
with NuGet and Versioning
NuGet Overview 
Controlling Component Chaos 
with NuGet and Versioning
What is NuGet? 
• YAPM: Yet Another Package Manager 
• Packages are zip archives 
• Originally .NET, now anything 
• Discovery, packages, dependencies, updates 
Controlling Component Chaos 
with NuGet and Versioning
How Does It Work? 
• Web site/service describes packages 
• NuGet.exe and VisualStudio extension: 
– Makes packages from specs 
– Pulls packages by ID and version 
– Pushes packages to publish 
Controlling Component Chaos 
with NuGet and Versioning
Nuget.org web site 
NuGet package feed 
(AtomPub) 
Controlling Component Chaos 
with NuGet and Versioning 
NuGet Extension 
NuGet.exe Tool 
NuGet Diagram
Consuming 
Components 
Controlling Component Chaos 
with NuGet and Versioning
Main NuGet Web Site 
Controlling Component Chaos 
with NuGet and Versioning
Package Details 
Controlling Component Chaos 
with NuGet and Versioning
Managing Packages in a Solution 
Controlling Component Chaos 
with NuGet and Versioning
How Does It Work? 
• Adds new build targets 
• Pulls and unzips packages 
• Creates/updates configuration files 
• Hooks up dependencies 
• Runs installer scripts (if any) 
Controlling Component Chaos 
with NuGet and Versioning
Some Obvious Questions 
• How does NuGet track what I’m using? 
• How do others get the same packages? 
• Do I need to add it to my build process? 
Controlling Component Chaos 
with NuGet and Versioning
NuGet Folders and Files 
Controlling Component Chaos 
with NuGet and Versioning
Packages.config Contents 
Controlling Component Chaos 
with NuGet and Versioning
What Do I Version? 
• All packages.config files 
• The .nuget folder contents 
• Nothing else needs to be versioned 
Controlling Component Chaos 
with NuGet and Versioning
Component Versions 
• Pulls by semantic version 
• Update process prefers latest 
• Default strategy updates dependencies too 
• Update must be used carefully 
Controlling Component Chaos 
with NuGet and Versioning
Perforce Tips 
• Prefer implicit checkout 
• Reconcile before and after 
• P4 ignore is your friend 
• Be sure to use P4VS 
• Isolate big NuGet operations 
Controlling Component Chaos 
with NuGet and Versioning
Implicit Checkout Means +Allwrite 
Controlling Component Chaos 
with NuGet and Versioning
But I Prefer Explicit Checkout! 
• Problems installing/updating 
• Mark as edit ahead of time 
• Seek masochist support group 
Controlling Component Chaos 
with NuGet and Versioning
DevOps Considerations 
• Clean to catch old references 
• Different feeds for different builds 
• Automate third-party package audits 
• Scripting catches multiple versions 
Controlling Component Chaos 
with NuGet and Versioning
Producing 
Components 
Controlling Component Chaos 
with NuGet and Versioning
Some Assembly Required 
• Privacy requires your own NuGet server 
• Organizational shift in thinking 
• Good naming conventions early 
• Understand semantic versioning 
Controlling Component Chaos 
with NuGet and Versioning
Some Obvious Questions 
• How do I make my own packages? 
• Where do I put them? 
• And how do I put them there? 
Controlling Component Chaos 
with NuGet and Versioning
Building a Package 
• The *.nuspec file 
– Useful metadata 
– Content and layout 
– Other package dependencies 
• NuGet tool creates package 
• Push with a new version number 
Controlling Component Chaos 
with NuGet and Versioning
Development Best Practices 
• Understand semantic versioning 
• Develop components in isolation 
• Careful interface design and versioning 
• Unit test at least every public method 
• Document all public symbols 
Controlling Component Chaos 
with NuGet and Versioning
DevOps Considerations 
• Automate push on release and documentation 
• Automate labelling for traceability 
• Source/symbol serving is your friend 
• Version all the things! (if you wish) 
Controlling Component Chaos 
with NuGet and Versioning
Gotchas and Q&A 
Controlling Component Chaos 
with NuGet and Versioning
Common Gotchas 
• Pre-configure Visual Studio 
• Relative paths for source server 
• NuGet extension problem with P4VS 
• Update versioning strategy 
• Soft dependencies can hurt 
Controlling Component Chaos 
with NuGet and Versioning
THANK YOU!!! 
John Williston, Ph.D 
jwilliston@perforce.com 
@p4jbw 
Controlling Component Chaos 
with NuGet and Versioning 
P4Ideax Forums

More Related Content

What's hot

Rsyslog version naming (v8.6.0+)
Rsyslog version naming (v8.6.0+)Rsyslog version naming (v8.6.0+)
Rsyslog version naming (v8.6.0+)Rainer Gerhards
 
Smarter deployments with octopus deploy
Smarter deployments with octopus deploySmarter deployments with octopus deploy
Smarter deployments with octopus deployThibaud Gravrand
 
Getting started with puppet and vagrant (1)
Getting started with puppet and vagrant (1)Getting started with puppet and vagrant (1)
Getting started with puppet and vagrant (1)Puppet
 
De-centralise and Conquer: Masterless Puppet in a Dynamic Environment
De-centralise and Conquer: Masterless Puppet in a Dynamic EnvironmentDe-centralise and Conquer: Masterless Puppet in a Dynamic Environment
De-centralise and Conquer: Masterless Puppet in a Dynamic EnvironmentPuppet
 
Organize your chickens: NuGet for the enterprise
Organize your chickens: NuGet for the enterpriseOrganize your chickens: NuGet for the enterprise
Organize your chickens: NuGet for the enterpriseMaarten Balliauw
 
JUC Europe 2015: Plugin Development with Gradle and Groovy
JUC Europe 2015: Plugin Development with Gradle and GroovyJUC Europe 2015: Plugin Development with Gradle and Groovy
JUC Europe 2015: Plugin Development with Gradle and GroovyCloudBees
 
Ansible: What, Why & How
Ansible: What, Why & HowAnsible: What, Why & How
Ansible: What, Why & HowAlfonso Cabrera
 
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source ToolsTYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source ToolsMichael Lihs
 
Make It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version ControlMake It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version Controlindiver
 
Patch Management on Windows with Puppet
Patch Management on Windows with PuppetPatch Management on Windows with Puppet
Patch Management on Windows with PuppetPuppet
 
Continuous Integration with Puppet
Continuous Integration with PuppetContinuous Integration with Puppet
Continuous Integration with PuppetMiguel Zuniga
 
ContainerCon - Test Driven Infrastructure
ContainerCon - Test Driven InfrastructureContainerCon - Test Driven Infrastructure
ContainerCon - Test Driven InfrastructureYury Tsarev
 
JUC Europe 2015: Jenkins Made Easy
JUC Europe 2015: Jenkins Made EasyJUC Europe 2015: Jenkins Made Easy
JUC Europe 2015: Jenkins Made EasyCloudBees
 
Introduction to Git for developers
Introduction to Git for developersIntroduction to Git for developers
Introduction to Git for developersDmitry Guyvoronsky
 
SaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web Scale
SaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web ScaleSaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web Scale
SaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web ScaleSaltStack
 
Develop Operation, Operate Development: A journey towards service delivery at...
Develop Operation, Operate Development: A journey towards service delivery at...Develop Operation, Operate Development: A journey towards service delivery at...
Develop Operation, Operate Development: A journey towards service delivery at...Behrooz Nobakht
 
Automate your Development Environment with Vagrant & Chef
Automate your Development Environment with Vagrant & ChefAutomate your Development Environment with Vagrant & Chef
Automate your Development Environment with Vagrant & Chef Michael Lihs
 

What's hot (20)

Rsyslog version naming (v8.6.0+)
Rsyslog version naming (v8.6.0+)Rsyslog version naming (v8.6.0+)
Rsyslog version naming (v8.6.0+)
 
Developing NuGet
Developing NuGetDeveloping NuGet
Developing NuGet
 
Smarter deployments with octopus deploy
Smarter deployments with octopus deploySmarter deployments with octopus deploy
Smarter deployments with octopus deploy
 
Getting started with puppet and vagrant (1)
Getting started with puppet and vagrant (1)Getting started with puppet and vagrant (1)
Getting started with puppet and vagrant (1)
 
De-centralise and Conquer: Masterless Puppet in a Dynamic Environment
De-centralise and Conquer: Masterless Puppet in a Dynamic EnvironmentDe-centralise and Conquer: Masterless Puppet in a Dynamic Environment
De-centralise and Conquer: Masterless Puppet in a Dynamic Environment
 
Organize your chickens: NuGet for the enterprise
Organize your chickens: NuGet for the enterpriseOrganize your chickens: NuGet for the enterprise
Organize your chickens: NuGet for the enterprise
 
JUC Europe 2015: Plugin Development with Gradle and Groovy
JUC Europe 2015: Plugin Development with Gradle and GroovyJUC Europe 2015: Plugin Development with Gradle and Groovy
JUC Europe 2015: Plugin Development with Gradle and Groovy
 
Ansible: What, Why & How
Ansible: What, Why & HowAnsible: What, Why & How
Ansible: What, Why & How
 
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source ToolsTYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
 
Version Controlling With Git
Version Controlling With GitVersion Controlling With Git
Version Controlling With Git
 
Make It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version ControlMake It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version Control
 
Patch Management on Windows with Puppet
Patch Management on Windows with PuppetPatch Management on Windows with Puppet
Patch Management on Windows with Puppet
 
Continuous Integration with Puppet
Continuous Integration with PuppetContinuous Integration with Puppet
Continuous Integration with Puppet
 
ContainerCon - Test Driven Infrastructure
ContainerCon - Test Driven InfrastructureContainerCon - Test Driven Infrastructure
ContainerCon - Test Driven Infrastructure
 
JUC Europe 2015: Jenkins Made Easy
JUC Europe 2015: Jenkins Made EasyJUC Europe 2015: Jenkins Made Easy
JUC Europe 2015: Jenkins Made Easy
 
Introduction to Git for developers
Introduction to Git for developersIntroduction to Git for developers
Introduction to Git for developers
 
SaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web Scale
SaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web ScaleSaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web Scale
SaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web Scale
 
Develop Operation, Operate Development: A journey towards service delivery at...
Develop Operation, Operate Development: A journey towards service delivery at...Develop Operation, Operate Development: A journey towards service delivery at...
Develop Operation, Operate Development: A journey towards service delivery at...
 
From Virtual Machines to Containers
From Virtual Machines to ContainersFrom Virtual Machines to Containers
From Virtual Machines to Containers
 
Automate your Development Environment with Vagrant & Chef
Automate your Development Environment with Vagrant & ChefAutomate your Development Environment with Vagrant & Chef
Automate your Development Environment with Vagrant & Chef
 

Viewers also liked

ALIMENTACION Y NUTRICION
ALIMENTACION Y NUTRICIONALIMENTACION Y NUTRICION
ALIMENTACION Y NUTRICIONesco891
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15MoscowJS
 
Разработка веб-приложений с помощью TypeScript
Разработка веб-приложений с помощью TypeScriptРазработка веб-приложений с помощью TypeScript
Разработка веб-приложений с помощью TypeScriptStas Vyschepan
 
Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)
Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)
Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)Ontico
 
Как Web-акселератор акселерирует ваш сайт / Александр Крижановский (Tempesta ...
Как Web-акселератор акселерирует ваш сайт / Александр Крижановский (Tempesta ...Как Web-акселератор акселерирует ваш сайт / Александр Крижановский (Tempesta ...
Как Web-акселератор акселерирует ваш сайт / Александр Крижановский (Tempesta ...Ontico
 
Как сравнить и выбрать хостинг-провайдера или О чем умалчивают маркетологи / ...
Как сравнить и выбрать хостинг-провайдера или О чем умалчивают маркетологи / ...Как сравнить и выбрать хостинг-провайдера или О чем умалчивают маркетологи / ...
Как сравнить и выбрать хостинг-провайдера или О чем умалчивают маркетологи / ...Ontico
 
Как перестать отлаживать асинхронный код и начать жить / Андрей Саломатин (Pr...
Как перестать отлаживать асинхронный код и начать жить / Андрей Саломатин (Pr...Как перестать отлаживать асинхронный код и начать жить / Андрей Саломатин (Pr...
Как перестать отлаживать асинхронный код и начать жить / Андрей Саломатин (Pr...Ontico
 
Single Page Applications neu gedacht: Redux in Angular 2 mit @ngrx/store
Single Page Applications neu gedacht: Redux in Angular 2 mit @ngrx/storeSingle Page Applications neu gedacht: Redux in Angular 2 mit @ngrx/store
Single Page Applications neu gedacht: Redux in Angular 2 mit @ngrx/storeManfred Steyer
 
шардинг на коленке
шардинг на коленкешардинг на коленке
шардинг на коленкеAlexandre Kalendarev
 
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Ontico
 
Организация конвейера автоматизации тестирования / Алексей Петров (Mail.ru Gr...
Организация конвейера автоматизации тестирования / Алексей Петров (Mail.ru Gr...Организация конвейера автоматизации тестирования / Алексей Петров (Mail.ru Gr...
Организация конвейера автоматизации тестирования / Алексей Петров (Mail.ru Gr...Ontico
 
Modern Development with Microsoft
Modern Development with MicrosoftModern Development with Microsoft
Modern Development with MicrosoftJoshua Drew
 
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Ontico
 
Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA)
Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA)Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA)
Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA)Ontico
 
Angular2 & ngrx/store: Game of States
Angular2 & ngrx/store: Game of StatesAngular2 & ngrx/store: Game of States
Angular2 & ngrx/store: Game of StatesOren Farhi
 

Viewers also liked (20)

ALIMENTACION Y NUTRICION
ALIMENTACION Y NUTRICIONALIMENTACION Y NUTRICION
ALIMENTACION Y NUTRICION
 
Trabajo práctico sobre "Nutrición"
Trabajo práctico sobre "Nutrición"Trabajo práctico sobre "Nutrición"
Trabajo práctico sobre "Nutrición"
 
Trabajo escrito de la nutricion
Trabajo escrito de la nutricionTrabajo escrito de la nutricion
Trabajo escrito de la nutricion
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
 
Разработка веб-приложений с помощью TypeScript
Разработка веб-приложений с помощью TypeScriptРазработка веб-приложений с помощью TypeScript
Разработка веб-приложений с помощью TypeScript
 
Quality assurance
Quality assuranceQuality assurance
Quality assurance
 
Where to test first?
Where to test first?Where to test first?
Where to test first?
 
Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)
Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)
Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)
 
Как Web-акселератор акселерирует ваш сайт / Александр Крижановский (Tempesta ...
Как Web-акселератор акселерирует ваш сайт / Александр Крижановский (Tempesta ...Как Web-акселератор акселерирует ваш сайт / Александр Крижановский (Tempesta ...
Как Web-акселератор акселерирует ваш сайт / Александр Крижановский (Tempesta ...
 
Как сравнить и выбрать хостинг-провайдера или О чем умалчивают маркетологи / ...
Как сравнить и выбрать хостинг-провайдера или О чем умалчивают маркетологи / ...Как сравнить и выбрать хостинг-провайдера или О чем умалчивают маркетологи / ...
Как сравнить и выбрать хостинг-провайдера или О чем умалчивают маркетологи / ...
 
Как перестать отлаживать асинхронный код и начать жить / Андрей Саломатин (Pr...
Как перестать отлаживать асинхронный код и начать жить / Андрей Саломатин (Pr...Как перестать отлаживать асинхронный код и начать жить / Андрей Саломатин (Pr...
Как перестать отлаживать асинхронный код и начать жить / Андрей Саломатин (Pr...
 
Single Page Applications neu gedacht: Redux in Angular 2 mit @ngrx/store
Single Page Applications neu gedacht: Redux in Angular 2 mit @ngrx/storeSingle Page Applications neu gedacht: Redux in Angular 2 mit @ngrx/store
Single Page Applications neu gedacht: Redux in Angular 2 mit @ngrx/store
 
шардинг на коленке
шардинг на коленкешардинг на коленке
шардинг на коленке
 
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
 
Angular2
Angular2Angular2
Angular2
 
Организация конвейера автоматизации тестирования / Алексей Петров (Mail.ru Gr...
Организация конвейера автоматизации тестирования / Алексей Петров (Mail.ru Gr...Организация конвейера автоматизации тестирования / Алексей Петров (Mail.ru Gr...
Организация конвейера автоматизации тестирования / Алексей Петров (Mail.ru Gr...
 
Modern Development with Microsoft
Modern Development with MicrosoftModern Development with Microsoft
Modern Development with Microsoft
 
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
 
Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA)
Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA)Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA)
Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA)
 
Angular2 & ngrx/store: Game of States
Angular2 & ngrx/store: Game of StatesAngular2 & ngrx/store: Game of States
Angular2 & ngrx/store: Game of States
 

Similar to Controlling Component Chaos with NuGet and Versioning

Using nu get the way you should svcc
Using nu get the way you should   svccUsing nu get the way you should   svcc
Using nu get the way you should svccMaarten Balliauw
 
NuGet (anti-)patterns - Tales from the Trenches
NuGet (anti-)patterns - Tales from the TrenchesNuGet (anti-)patterns - Tales from the Trenches
NuGet (anti-)patterns - Tales from the TrenchesXavier Decoster
 
Visug - organize your chickens - nuget for the enterprise
Visug - organize your chickens - nuget for the enterpriseVisug - organize your chickens - nuget for the enterprise
Visug - organize your chickens - nuget for the enterpriseXavier Decoster
 
The Art & Zen of Managing Nagios with Puppet
The Art & Zen of Managing Nagios with PuppetThe Art & Zen of Managing Nagios with Puppet
The Art & Zen of Managing Nagios with PuppetVictorOps
 
Package Management and Chef - ChefConf 2015
Package Management and Chef - ChefConf 2015Package Management and Chef - ChefConf 2015
Package Management and Chef - ChefConf 2015Chef
 
Chef Conf 2015: Package Management & Chef
Chef Conf 2015: Package Management & ChefChef Conf 2015: Package Management & Chef
Chef Conf 2015: Package Management & Chefice799
 
Deploying software at Scale
Deploying software at ScaleDeploying software at Scale
Deploying software at ScaleKris Buytaert
 
Novedades Denali Integration Services
Novedades Denali Integration ServicesNovedades Denali Integration Services
Novedades Denali Integration ServicesSolidQ
 
Artifacts management with DevOps
Artifacts management with DevOpsArtifacts management with DevOps
Artifacts management with DevOpsChen-Tien Tsai
 
Fluo CICD OpenStack Summit
Fluo CICD OpenStack SummitFluo CICD OpenStack Summit
Fluo CICD OpenStack SummitMiguel Zuniga
 
Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)
Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)
Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)Ahmed El-Arabawy
 
Modern Module Development
Modern Module DevelopmentModern Module Development
Modern Module Development_morgan
 
Intro to GKE and app deployment with Kubernetes
Intro to GKE and app deployment with KubernetesIntro to GKE and app deployment with Kubernetes
Intro to GKE and app deployment with KubernetesGDG Cloud Bengaluru
 
Puppet Camp Portland: Nagios Management With Puppet (Beginner)
Puppet Camp Portland: Nagios Management With Puppet (Beginner)Puppet Camp Portland: Nagios Management With Puppet (Beginner)
Puppet Camp Portland: Nagios Management With Puppet (Beginner)Puppet
 
OUG Ireland Meet-up 12th January
OUG Ireland Meet-up 12th JanuaryOUG Ireland Meet-up 12th January
OUG Ireland Meet-up 12th JanuaryBrendan Tierney
 
Production Ready WordPress #WPLDN
Production Ready WordPress #WPLDNProduction Ready WordPress #WPLDN
Production Ready WordPress #WPLDNEdmund Turbin
 
Production Ready WordPress - WC Utrecht 2017
Production Ready WordPress  - WC Utrecht 2017Production Ready WordPress  - WC Utrecht 2017
Production Ready WordPress - WC Utrecht 2017Edmund Turbin
 

Similar to Controlling Component Chaos with NuGet and Versioning (20)

Using nu get the way you should svcc
Using nu get the way you should   svccUsing nu get the way you should   svcc
Using nu get the way you should svcc
 
NuGet (anti-)patterns - Tales from the Trenches
NuGet (anti-)patterns - Tales from the TrenchesNuGet (anti-)patterns - Tales from the Trenches
NuGet (anti-)patterns - Tales from the Trenches
 
4 maven junit
4 maven junit4 maven junit
4 maven junit
 
Visug - organize your chickens - nuget for the enterprise
Visug - organize your chickens - nuget for the enterpriseVisug - organize your chickens - nuget for the enterprise
Visug - organize your chickens - nuget for the enterprise
 
The Art & Zen of Managing Nagios with Puppet
The Art & Zen of Managing Nagios with PuppetThe Art & Zen of Managing Nagios with Puppet
The Art & Zen of Managing Nagios with Puppet
 
Devops
DevopsDevops
Devops
 
Package Management and Chef - ChefConf 2015
Package Management and Chef - ChefConf 2015Package Management and Chef - ChefConf 2015
Package Management and Chef - ChefConf 2015
 
Chef Conf 2015: Package Management & Chef
Chef Conf 2015: Package Management & ChefChef Conf 2015: Package Management & Chef
Chef Conf 2015: Package Management & Chef
 
Deploying software at Scale
Deploying software at ScaleDeploying software at Scale
Deploying software at Scale
 
Novedades Denali Integration Services
Novedades Denali Integration ServicesNovedades Denali Integration Services
Novedades Denali Integration Services
 
Artifacts management with DevOps
Artifacts management with DevOpsArtifacts management with DevOps
Artifacts management with DevOps
 
Fluo CICD OpenStack Summit
Fluo CICD OpenStack SummitFluo CICD OpenStack Summit
Fluo CICD OpenStack Summit
 
Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)
Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)
Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)
 
Jenkins as a Service
Jenkins as a ServiceJenkins as a Service
Jenkins as a Service
 
Modern Module Development
Modern Module DevelopmentModern Module Development
Modern Module Development
 
Intro to GKE and app deployment with Kubernetes
Intro to GKE and app deployment with KubernetesIntro to GKE and app deployment with Kubernetes
Intro to GKE and app deployment with Kubernetes
 
Puppet Camp Portland: Nagios Management With Puppet (Beginner)
Puppet Camp Portland: Nagios Management With Puppet (Beginner)Puppet Camp Portland: Nagios Management With Puppet (Beginner)
Puppet Camp Portland: Nagios Management With Puppet (Beginner)
 
OUG Ireland Meet-up 12th January
OUG Ireland Meet-up 12th JanuaryOUG Ireland Meet-up 12th January
OUG Ireland Meet-up 12th January
 
Production Ready WordPress #WPLDN
Production Ready WordPress #WPLDNProduction Ready WordPress #WPLDN
Production Ready WordPress #WPLDN
 
Production Ready WordPress - WC Utrecht 2017
Production Ready WordPress  - WC Utrecht 2017Production Ready WordPress  - WC Utrecht 2017
Production Ready WordPress - WC Utrecht 2017
 

More from Perforce

How to Organize Game Developers With Different Planning Needs
How to Organize Game Developers With Different Planning NeedsHow to Organize Game Developers With Different Planning Needs
How to Organize Game Developers With Different Planning NeedsPerforce
 
Regulatory Traceability: How to Maintain Compliance, Quality, and Cost Effic...
Regulatory Traceability:  How to Maintain Compliance, Quality, and Cost Effic...Regulatory Traceability:  How to Maintain Compliance, Quality, and Cost Effic...
Regulatory Traceability: How to Maintain Compliance, Quality, and Cost Effic...Perforce
 
Efficient Security Development and Testing Using Dynamic and Static Code Anal...
Efficient Security Development and Testing Using Dynamic and Static Code Anal...Efficient Security Development and Testing Using Dynamic and Static Code Anal...
Efficient Security Development and Testing Using Dynamic and Static Code Anal...Perforce
 
Understanding Compliant Workflow Enforcement SOPs
Understanding Compliant Workflow Enforcement SOPsUnderstanding Compliant Workflow Enforcement SOPs
Understanding Compliant Workflow Enforcement SOPsPerforce
 
Branching Out: How To Automate Your Development Process
Branching Out: How To Automate Your Development ProcessBranching Out: How To Automate Your Development Process
Branching Out: How To Automate Your Development ProcessPerforce
 
How to Do Code Reviews at Massive Scale For DevOps
How to Do Code Reviews at Massive Scale For DevOpsHow to Do Code Reviews at Massive Scale For DevOps
How to Do Code Reviews at Massive Scale For DevOpsPerforce
 
How to Spark Joy In Your Product Backlog
How to Spark Joy In Your Product Backlog How to Spark Joy In Your Product Backlog
How to Spark Joy In Your Product Backlog Perforce
 
Going Remote: Build Up Your Game Dev Team
Going Remote: Build Up Your Game Dev Team Going Remote: Build Up Your Game Dev Team
Going Remote: Build Up Your Game Dev Team Perforce
 
Shift to Remote: How to Manage Your New Workflow
Shift to Remote: How to Manage Your New WorkflowShift to Remote: How to Manage Your New Workflow
Shift to Remote: How to Manage Your New WorkflowPerforce
 
Hybrid Development Methodology in a Regulated World
Hybrid Development Methodology in a Regulated WorldHybrid Development Methodology in a Regulated World
Hybrid Development Methodology in a Regulated WorldPerforce
 
Better, Faster, Easier: How to Make Git Really Work in the Enterprise
Better, Faster, Easier: How to Make Git Really Work in the EnterpriseBetter, Faster, Easier: How to Make Git Really Work in the Enterprise
Better, Faster, Easier: How to Make Git Really Work in the EnterprisePerforce
 
Easier Requirements Management Using Diagrams In Helix ALM
Easier Requirements Management Using Diagrams In Helix ALMEasier Requirements Management Using Diagrams In Helix ALM
Easier Requirements Management Using Diagrams In Helix ALMPerforce
 
How To Master Your Mega Backlog
How To Master Your Mega Backlog How To Master Your Mega Backlog
How To Master Your Mega Backlog Perforce
 
Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...
Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...
Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...Perforce
 
How to Scale With Helix Core and Microsoft Azure
How to Scale With Helix Core and Microsoft Azure How to Scale With Helix Core and Microsoft Azure
How to Scale With Helix Core and Microsoft Azure Perforce
 
Achieving Software Safety, Security, and Reliability Part 2
Achieving Software Safety, Security, and Reliability Part 2Achieving Software Safety, Security, and Reliability Part 2
Achieving Software Safety, Security, and Reliability Part 2Perforce
 
Should You Break Up With Your Monolith?
Should You Break Up With Your Monolith?Should You Break Up With Your Monolith?
Should You Break Up With Your Monolith?Perforce
 
Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...
Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...
Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...Perforce
 
What's New in Helix ALM 2019.4
What's New in Helix ALM 2019.4What's New in Helix ALM 2019.4
What's New in Helix ALM 2019.4Perforce
 
Free Yourself From the MS Office Prison
Free Yourself From the MS Office Prison Free Yourself From the MS Office Prison
Free Yourself From the MS Office Prison Perforce
 

More from Perforce (20)

How to Organize Game Developers With Different Planning Needs
How to Organize Game Developers With Different Planning NeedsHow to Organize Game Developers With Different Planning Needs
How to Organize Game Developers With Different Planning Needs
 
Regulatory Traceability: How to Maintain Compliance, Quality, and Cost Effic...
Regulatory Traceability:  How to Maintain Compliance, Quality, and Cost Effic...Regulatory Traceability:  How to Maintain Compliance, Quality, and Cost Effic...
Regulatory Traceability: How to Maintain Compliance, Quality, and Cost Effic...
 
Efficient Security Development and Testing Using Dynamic and Static Code Anal...
Efficient Security Development and Testing Using Dynamic and Static Code Anal...Efficient Security Development and Testing Using Dynamic and Static Code Anal...
Efficient Security Development and Testing Using Dynamic and Static Code Anal...
 
Understanding Compliant Workflow Enforcement SOPs
Understanding Compliant Workflow Enforcement SOPsUnderstanding Compliant Workflow Enforcement SOPs
Understanding Compliant Workflow Enforcement SOPs
 
Branching Out: How To Automate Your Development Process
Branching Out: How To Automate Your Development ProcessBranching Out: How To Automate Your Development Process
Branching Out: How To Automate Your Development Process
 
How to Do Code Reviews at Massive Scale For DevOps
How to Do Code Reviews at Massive Scale For DevOpsHow to Do Code Reviews at Massive Scale For DevOps
How to Do Code Reviews at Massive Scale For DevOps
 
How to Spark Joy In Your Product Backlog
How to Spark Joy In Your Product Backlog How to Spark Joy In Your Product Backlog
How to Spark Joy In Your Product Backlog
 
Going Remote: Build Up Your Game Dev Team
Going Remote: Build Up Your Game Dev Team Going Remote: Build Up Your Game Dev Team
Going Remote: Build Up Your Game Dev Team
 
Shift to Remote: How to Manage Your New Workflow
Shift to Remote: How to Manage Your New WorkflowShift to Remote: How to Manage Your New Workflow
Shift to Remote: How to Manage Your New Workflow
 
Hybrid Development Methodology in a Regulated World
Hybrid Development Methodology in a Regulated WorldHybrid Development Methodology in a Regulated World
Hybrid Development Methodology in a Regulated World
 
Better, Faster, Easier: How to Make Git Really Work in the Enterprise
Better, Faster, Easier: How to Make Git Really Work in the EnterpriseBetter, Faster, Easier: How to Make Git Really Work in the Enterprise
Better, Faster, Easier: How to Make Git Really Work in the Enterprise
 
Easier Requirements Management Using Diagrams In Helix ALM
Easier Requirements Management Using Diagrams In Helix ALMEasier Requirements Management Using Diagrams In Helix ALM
Easier Requirements Management Using Diagrams In Helix ALM
 
How To Master Your Mega Backlog
How To Master Your Mega Backlog How To Master Your Mega Backlog
How To Master Your Mega Backlog
 
Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...
Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...
Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...
 
How to Scale With Helix Core and Microsoft Azure
How to Scale With Helix Core and Microsoft Azure How to Scale With Helix Core and Microsoft Azure
How to Scale With Helix Core and Microsoft Azure
 
Achieving Software Safety, Security, and Reliability Part 2
Achieving Software Safety, Security, and Reliability Part 2Achieving Software Safety, Security, and Reliability Part 2
Achieving Software Safety, Security, and Reliability Part 2
 
Should You Break Up With Your Monolith?
Should You Break Up With Your Monolith?Should You Break Up With Your Monolith?
Should You Break Up With Your Monolith?
 
Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...
Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...
Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...
 
What's New in Helix ALM 2019.4
What's New in Helix ALM 2019.4What's New in Helix ALM 2019.4
What's New in Helix ALM 2019.4
 
Free Yourself From the MS Office Prison
Free Yourself From the MS Office Prison Free Yourself From the MS Office Prison
Free Yourself From the MS Office Prison
 

Recently uploaded

How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 

Recently uploaded (20)

How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 

Controlling Component Chaos with NuGet and Versioning

  • 1. Controlling Component Chaos with NuGet and Versioning by John Williston Perforce Software
  • 2. John Williston Perforce Software Controlling Component Chaos with NuGet and Versioning
  • 3. Agenda • NuGet overview • Consuming components • Producing components • Gotchas and Q&A Controlling Component Chaos with NuGet and Versioning
  • 4. NuGet Overview Controlling Component Chaos with NuGet and Versioning
  • 5. What is NuGet? • YAPM: Yet Another Package Manager • Packages are zip archives • Originally .NET, now anything • Discovery, packages, dependencies, updates Controlling Component Chaos with NuGet and Versioning
  • 6. How Does It Work? • Web site/service describes packages • NuGet.exe and VisualStudio extension: – Makes packages from specs – Pulls packages by ID and version – Pushes packages to publish Controlling Component Chaos with NuGet and Versioning
  • 7. Nuget.org web site NuGet package feed (AtomPub) Controlling Component Chaos with NuGet and Versioning NuGet Extension NuGet.exe Tool NuGet Diagram
  • 8. Consuming Components Controlling Component Chaos with NuGet and Versioning
  • 9. Main NuGet Web Site Controlling Component Chaos with NuGet and Versioning
  • 10. Package Details Controlling Component Chaos with NuGet and Versioning
  • 11. Managing Packages in a Solution Controlling Component Chaos with NuGet and Versioning
  • 12. How Does It Work? • Adds new build targets • Pulls and unzips packages • Creates/updates configuration files • Hooks up dependencies • Runs installer scripts (if any) Controlling Component Chaos with NuGet and Versioning
  • 13. Some Obvious Questions • How does NuGet track what I’m using? • How do others get the same packages? • Do I need to add it to my build process? Controlling Component Chaos with NuGet and Versioning
  • 14. NuGet Folders and Files Controlling Component Chaos with NuGet and Versioning
  • 15. Packages.config Contents Controlling Component Chaos with NuGet and Versioning
  • 16. What Do I Version? • All packages.config files • The .nuget folder contents • Nothing else needs to be versioned Controlling Component Chaos with NuGet and Versioning
  • 17. Component Versions • Pulls by semantic version • Update process prefers latest • Default strategy updates dependencies too • Update must be used carefully Controlling Component Chaos with NuGet and Versioning
  • 18. Perforce Tips • Prefer implicit checkout • Reconcile before and after • P4 ignore is your friend • Be sure to use P4VS • Isolate big NuGet operations Controlling Component Chaos with NuGet and Versioning
  • 19. Implicit Checkout Means +Allwrite Controlling Component Chaos with NuGet and Versioning
  • 20. But I Prefer Explicit Checkout! • Problems installing/updating • Mark as edit ahead of time • Seek masochist support group Controlling Component Chaos with NuGet and Versioning
  • 21. DevOps Considerations • Clean to catch old references • Different feeds for different builds • Automate third-party package audits • Scripting catches multiple versions Controlling Component Chaos with NuGet and Versioning
  • 22. Producing Components Controlling Component Chaos with NuGet and Versioning
  • 23. Some Assembly Required • Privacy requires your own NuGet server • Organizational shift in thinking • Good naming conventions early • Understand semantic versioning Controlling Component Chaos with NuGet and Versioning
  • 24. Some Obvious Questions • How do I make my own packages? • Where do I put them? • And how do I put them there? Controlling Component Chaos with NuGet and Versioning
  • 25. Building a Package • The *.nuspec file – Useful metadata – Content and layout – Other package dependencies • NuGet tool creates package • Push with a new version number Controlling Component Chaos with NuGet and Versioning
  • 26. Development Best Practices • Understand semantic versioning • Develop components in isolation • Careful interface design and versioning • Unit test at least every public method • Document all public symbols Controlling Component Chaos with NuGet and Versioning
  • 27. DevOps Considerations • Automate push on release and documentation • Automate labelling for traceability • Source/symbol serving is your friend • Version all the things! (if you wish) Controlling Component Chaos with NuGet and Versioning
  • 28. Gotchas and Q&A Controlling Component Chaos with NuGet and Versioning
  • 29. Common Gotchas • Pre-configure Visual Studio • Relative paths for source server • NuGet extension problem with P4VS • Update versioning strategy • Soft dependencies can hurt Controlling Component Chaos with NuGet and Versioning
  • 30. THANK YOU!!! John Williston, Ph.D jwilliston@perforce.com @p4jbw Controlling Component Chaos with NuGet and Versioning P4Ideax Forums

Editor's Notes

  1. The NuGet Package Explorer is a handy, open-source tool for viewing packages: http://npe.codeplex.com/
  2. A NuGet feed includes data that’s obvious and not so obvious. A good article on working with the API is “”Fun With NuGet Web API” at: http://chris.eldredge.io/blog/2013/02/25/fun-with-nuget-rest-api/
  3. The main NuGet web site lets you browse and search for packages easily. See http://www.nuget.org for details.
  4. Here we see the details for the latest stable release of Entity Framework, and the command line in the middle can be run from the package manager console to install it without touching the GUI tool.
  5. To get to the tool, simply right click your solution in the explorer window and choose the option to manage NuGet packages. Over on the left you can see options to switch between packages already installed in your solution/projects, packages available online, and any updates, all of which are grouped by known feeds. The center shows the resulting list and the pane on the right shows details.
  6. In the folder tree on the left we can see both the .nuget and packages folders underneath the solution folder, which is where NuGet will create them. On the right we see two horizontal panes, the top of which shows the contents of the .nuget folder, the bottom of which shows a packages.config file in the context of a REST API web application.
  7. Here we see the contents of a packages.config file, each XML package element corresponding to a NuGet package.
  8. More information on semantic versioning at http://semver.org
  9. You can get the Perforce Visual Studio Plug-in at: http://www.perforce.com/product/components/visual-studio-plug-in
  10. Completely cleaning the working folder on your build server will delete the packages folder as long as you don’t version it. This will result in NuGet pulling down all the packages at build time, which will expose references to old versions, which can otherwise result in multiple versions of the same assembles being included in the same project(s), and that is the way of pain.
  11. A popular NuGet server with symbol support is NuPeek: https://bitbucket.org/thinkbeforecoding/nupeek
  12. The NuGet Package Explorer is a handy, open-source tool for viewing packages: http://npe.codeplex.com/
  13. NuSpec reference: http://docs.nuget.org/docs/reference/nuspec-reference
  14. VS2010 needs to have NuGet installed, whereas VS2012 and later shipped with it right out of the box. Pre-configuring your internal feed sources will also help on-board new developers. The NuGet extension for Visual Studio uses two different code paths for file operations, only one of which lets our P4VS plugin know what’s happening. We’re aware of the bug and hope to work with the NuGet community for a resolution. Until that time, be sure to reconcile after any significant NuGet operation to catch files of which P4VS wasn’t notified. NuGet doesn’t handle soft dependencies well; it wants to add a reference to every library included. And then Visual Studio will “helpfully” strip them away during build, package, and deploy.