SlideShare a Scribd company logo
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 (20)

PPTX
Rsyslog version naming (v8.6.0+)
Rainer Gerhards
 
PPTX
Developing NuGet
Jeff Handley
 
PPTX
Smarter deployments with octopus deploy
Thibaud Gravrand
 
PDF
Getting started with puppet and vagrant (1)
Puppet
 
PDF
De-centralise and Conquer: Masterless Puppet in a Dynamic Environment
Puppet
 
PPTX
Organize your chickens: NuGet for the enterprise
Maarten Balliauw
 
PDF
JUC Europe 2015: Plugin Development with Gradle and Groovy
CloudBees
 
PPTX
Ansible: What, Why & How
Alfonso Cabrera
 
PDF
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
Michael Lihs
 
PDF
Version Controlling With Git
Pubudu Suharshan Perera
 
KEY
Make It Cooler: Using Decentralized Version Control
indiver
 
PPTX
Patch Management on Windows with Puppet
Puppet
 
PPTX
Continuous Integration with Puppet
Miguel Zuniga
 
PDF
ContainerCon - Test Driven Infrastructure
Yury Tsarev
 
PDF
JUC Europe 2015: Jenkins Made Easy
CloudBees
 
PPT
Introduction to Git for developers
Dmitry Guyvoronsky
 
PDF
SaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web Scale
SaltStack
 
PDF
Develop Operation, Operate Development: A journey towards service delivery at...
Behrooz Nobakht
 
PDF
From Virtual Machines to Containers
camunda services GmbH
 
PPTX
Automate your Development Environment with Vagrant & Chef
Michael Lihs
 
Rsyslog version naming (v8.6.0+)
Rainer Gerhards
 
Developing NuGet
Jeff Handley
 
Smarter deployments with octopus deploy
Thibaud Gravrand
 
Getting started with puppet and vagrant (1)
Puppet
 
De-centralise and Conquer: Masterless Puppet in a Dynamic Environment
Puppet
 
Organize your chickens: NuGet for the enterprise
Maarten Balliauw
 
JUC Europe 2015: Plugin Development with Gradle and Groovy
CloudBees
 
Ansible: What, Why & How
Alfonso Cabrera
 
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
Michael Lihs
 
Version Controlling With Git
Pubudu Suharshan Perera
 
Make It Cooler: Using Decentralized Version Control
indiver
 
Patch Management on Windows with Puppet
Puppet
 
Continuous Integration with Puppet
Miguel Zuniga
 
ContainerCon - Test Driven Infrastructure
Yury Tsarev
 
JUC Europe 2015: Jenkins Made Easy
CloudBees
 
Introduction to Git for developers
Dmitry Guyvoronsky
 
SaltConf14 - Craig Sebenik, LinkedIn - SaltStack at Web Scale
SaltStack
 
Develop Operation, Operate Development: A journey towards service delivery at...
Behrooz Nobakht
 
From Virtual Machines to Containers
camunda services GmbH
 
Automate your Development Environment with Vagrant & Chef
Michael Lihs
 

Viewers also liked (20)

PPS
ALIMENTACION Y NUTRICION
esco891
 
PPT
Trabajo práctico sobre "Nutrición"
Marcela Fernández Grasso
 
DOCX
Trabajo escrito de la nutricion
octavioriveramarin1992
 
PDF
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
MoscowJS
 
PPTX
Разработка веб-приложений с помощью TypeScript
Stas Vyschepan
 
ODP
Quality assurance
Web Essentials Co., Ltd.
 
PDF
Where to test first?
Yaroslav Serhieiev
 
PDF
Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)
Ontico
 
ODP
Как Web-акселератор акселерирует ваш сайт / Александр Крижановский (Tempesta ...
Ontico
 
PPTX
Как сравнить и выбрать хостинг-провайдера или О чем умалчивают маркетологи / ...
Ontico
 
PDF
Как перестать отлаживать асинхронный код и начать жить / Андрей Саломатин (Pr...
Ontico
 
PDF
Single Page Applications neu gedacht: Redux in Angular 2 mit @ngrx/store
Manfred Steyer
 
PDF
шардинг на коленке
Alexandre Kalendarev
 
PPTX
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Ontico
 
PDF
Angular2
Sergey Melekhin
 
PDF
Организация конвейера автоматизации тестирования / Алексей Петров (Mail.ru Gr...
Ontico
 
PPTX
Modern Development with Microsoft
Joshua Drew
 
PPTX
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Ontico
 
PDF
Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA)
Ontico
 
PDF
Angular2 & ngrx/store: Game of States
Oren Farhi
 
ALIMENTACION Y NUTRICION
esco891
 
Trabajo práctico sobre "Nutrición"
Marcela Fernández Grasso
 
Trabajo escrito de la nutricion
octavioriveramarin1992
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
MoscowJS
 
Разработка веб-приложений с помощью TypeScript
Stas Vyschepan
 
Quality assurance
Web Essentials Co., Ltd.
 
Where to test first?
Yaroslav Serhieiev
 
Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)
Ontico
 
Как Web-акселератор акселерирует ваш сайт / Александр Крижановский (Tempesta ...
Ontico
 
Как сравнить и выбрать хостинг-провайдера или О чем умалчивают маркетологи / ...
Ontico
 
Как перестать отлаживать асинхронный код и начать жить / Андрей Саломатин (Pr...
Ontico
 
Single Page Applications neu gedacht: Redux in Angular 2 mit @ngrx/store
Manfred Steyer
 
шардинг на коленке
Alexandre Kalendarev
 
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Ontico
 
Angular2
Sergey Melekhin
 
Организация конвейера автоматизации тестирования / Алексей Петров (Mail.ru Gr...
Ontico
 
Modern Development with Microsoft
Joshua Drew
 
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Ontico
 
Пользовательские свойства как основа архитектуры CSS / Павел Ловцевич (LOVATA)
Ontico
 
Angular2 & ngrx/store: Game of States
Oren Farhi
 
Ad

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

PPTX
Using nu get the way you should svcc
Maarten Balliauw
 
PPTX
NuGet (anti-)patterns - Tales from the Trenches
Xavier Decoster
 
KEY
4 maven junit
Honnix Liang
 
PPTX
Visug - organize your chickens - nuget for the enterprise
Xavier Decoster
 
PPTX
The Art & Zen of Managing Nagios with Puppet
VictorOps
 
PPTX
Devops
JyothirmaiG4
 
PDF
Package Management and Chef - ChefConf 2015
Chef
 
PDF
Chef Conf 2015: Package Management & Chef
ice799
 
PDF
Deploying software at Scale
Kris Buytaert
 
PDF
Novedades Denali Integration Services
SolidQ
 
PPTX
Artifacts management with DevOps
Chen-Tien Tsai
 
PPTX
Fluo CICD OpenStack Summit
Miguel Zuniga
 
PDF
Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)
Ahmed El-Arabawy
 
PPTX
Jenkins as a Service
Sergey Dzyuban
 
PDF
Modern Module Development
_morgan
 
PDF
Intro to GKE and app deployment with Kubernetes
GDG Cloud Bengaluru
 
PDF
Puppet Camp Portland: Nagios Management With Puppet (Beginner)
Puppet
 
PDF
OUG Ireland Meet-up 12th January
Brendan Tierney
 
PDF
Production Ready WordPress #WPLDN
Edmund Turbin
 
PDF
Production Ready WordPress - WC Utrecht 2017
Edmund Turbin
 
Using nu get the way you should svcc
Maarten Balliauw
 
NuGet (anti-)patterns - Tales from the Trenches
Xavier Decoster
 
4 maven junit
Honnix Liang
 
Visug - organize your chickens - nuget for the enterprise
Xavier Decoster
 
The Art & Zen of Managing Nagios with Puppet
VictorOps
 
Devops
JyothirmaiG4
 
Package Management and Chef - ChefConf 2015
Chef
 
Chef Conf 2015: Package Management & Chef
ice799
 
Deploying software at Scale
Kris Buytaert
 
Novedades Denali Integration Services
SolidQ
 
Artifacts management with DevOps
Chen-Tien Tsai
 
Fluo CICD OpenStack Summit
Miguel Zuniga
 
Embedded Systems: Lecture 10: Introduction to Git & GitHub (Part 1)
Ahmed El-Arabawy
 
Jenkins as a Service
Sergey Dzyuban
 
Modern Module Development
_morgan
 
Intro to GKE and app deployment with Kubernetes
GDG Cloud Bengaluru
 
Puppet Camp Portland: Nagios Management With Puppet (Beginner)
Puppet
 
OUG Ireland Meet-up 12th January
Brendan Tierney
 
Production Ready WordPress #WPLDN
Edmund Turbin
 
Production Ready WordPress - WC Utrecht 2017
Edmund Turbin
 
Ad

More from Perforce (20)

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

Recently uploaded (20)

PDF
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
PDF
NLJUG Speaker academy 2025 - first session
Bert Jan Schrijver
 
PDF
NASA A Researcher’s Guide to International Space Station : Physical Sciences ...
Dr. PANKAJ DHUSSA
 
PDF
AI Agents in the Cloud: The Rise of Agentic Cloud Architecture
Lilly Gracia
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PPTX
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
PPTX
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
PDF
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
PDF
Peak of Data & AI Encore AI-Enhanced Workflows for the Real World
Safe Software
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PDF
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
PDF
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
DOCX
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
PDF
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
PDF
UiPath DevConnect 2025: Agentic Automation Community User Group Meeting
DianaGray10
 
PPTX
Digital Circuits, important subject in CS
contactparinay1
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
NLJUG Speaker academy 2025 - first session
Bert Jan Schrijver
 
NASA A Researcher’s Guide to International Space Station : Physical Sciences ...
Dr. PANKAJ DHUSSA
 
AI Agents in the Cloud: The Rise of Agentic Cloud Architecture
Lilly Gracia
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
Peak of Data & AI Encore AI-Enhanced Workflows for the Real World
Safe Software
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
UiPath DevConnect 2025: Agentic Automation Community User Group Meeting
DianaGray10
 
Digital Circuits, important subject in CS
contactparinay1
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 

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 [email protected] @p4jbw Controlling Component Chaos with NuGet and Versioning P4Ideax Forums

Editor's Notes

  • #6: The NuGet Package Explorer is a handy, open-source tool for viewing packages: http://npe.codeplex.com/
  • #7: 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/
  • #10: The main NuGet web site lets you browse and search for packages easily. See http://www.nuget.org for details.
  • #11: 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.
  • #12: 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.
  • #15: 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.
  • #16: Here we see the contents of a packages.config file, each XML package element corresponding to a NuGet package.
  • #18: More information on semantic versioning at http://semver.org
  • #19: You can get the Perforce Visual Studio Plug-in at: http://www.perforce.com/product/components/visual-studio-plug-in
  • #22: 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.
  • #24: A popular NuGet server with symbol support is NuPeek: https://bitbucket.org/thinkbeforecoding/nupeek
  • #25: The NuGet Package Explorer is a handy, open-source tool for viewing packages: http://npe.codeplex.com/
  • #26: NuSpec reference: http://docs.nuget.org/docs/reference/nuspec-reference
  • #30: 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.