SlideShare uma empresa Scribd logo
1 de 51
Organize your chickens NuGet for the Enterprise
Who are we? Maarten Balliauw Antwerp, Belgium www.realdolmen.com Focus on web ASP.NET, ASP.NET MVC, PHP, Azure, … MVP Windows Azure (formerly ASP.NET) http://blog.maartenballiauw.be @maartenballiauw
Who are we? Xavier Decoster Antwerp, Belgium www.realdolmen.com Focus on web/ALM Visual Studio, TFS, Scrum, ... Silverlight, ASP.NET, ASP.NET MVC, … http://www.xavierdecoster.com @xavierdecoster
Agenda Chickens? NuGet Scenarios Host your own NuGet repository Continuous (Package) Integration (Ab)usingNuGet Conclusion
Welcome to Dll Hell Dependency Hell
WelcometoDependency Hell “A term for the frustrationof software users who have installedsoftware packageswhich have  dependencieson specificversionsof other software packages.” Source: Wikipedia
Causeand Effect Reinventing the wheel We don’tneedthatdependency “If they can do it, we can do it, but better” Marketing does the versioning People are waitingfor v2 tobuy Let’s call it v4 Platform Update SP3 November Edition KB2348063 RTW Refresh  Whathappenedtoreuse of components?  We lost ownership of AssemblyVersion ?
Package Management Using NuGet
Package Management NuGet to the Rescue! “NuGet is a Visual Studio extension that makes it easy to install and update open source libraries and tools in Visual Studio.”
Package What? Package Management Simple concept Find Packages (Re)Use Packages Produce Packages “…a collection of software tools to automate the process of installing, upgrading, configuring, and removingsoftware packages…” Wikipedia
GettingStarted Tooling: NuGet Package Manager (http://nuget.org) NuGet Package Explorer (http://npe.codeplex.com) Install-Package NuGetPowerTools Install-Package NuGet.CommandLine Guidanceanddocumentation http://docs.nuget.org
Consuming Packages Simple as adding a reference
Onedialogtorulethemall… Install-Package Update-Package Uninstall-Package Settings Package Sources Local (offline) Cache location Also: Manage packages on solution level! Right-click solution > Manage NuGet Packages…
NuGet Package Manager Console PowerShellenabled! Extensible! Scaffolding, NuGetPowerTools, … %UserProfile%ocumentsindowsPowerShelluGet_profile.ps1
Configurable Package Sources Configurablethrough… NuGet Library Package Manager (VS add-in) NuGet.config (in %APPDATA%oaminguGetuGet.config) NuGet.settings.targets (MSBUILD file part of NuGetPowerTools)
Creating Packages What’s a package? Just a zip-filecontaining: … content and source code (tobeinjectedinto target project) … PowerShell scripts andexecutables … configuration file and source code transformations http://docs.nuget.org/docs/creating-packages/Configuration-File-and-Source-Code-Transformations
Package Conventions Conventions http://docs.nuget.org/docs/creating-packages/Package-Conventions Folder structure Tools (init.ps1, install.ps1, uninstall.ps1) Content Manifest (.nuspec file) Lib
NuGet Manifest Specification NuSpec manifest XML file (with XSD available) Package metadata
Semantic Versioning Think about your versioning! (semver.org) Always specifylowerbound Use a version range (lowerbound + upperbound) whenversioning of package youdepend on is messed up
Advanced usage scenarios Host your own NuGet repository Continuous (Package) Integration (Ab)using NuGet
Hosting your own repository Those chickens are mine!
Hosting your own repository NuGet = public feed Privacy Intellectual property NuGet maintained by package authors Author removes v1.0.45 and you depend on it
Solutions Folder / File share Orchard Gallery (or NuGet Gallery) NuGet.Server package MyGet
NuGet.Server Demo Install-Package NuGet.Server
NuGet.Serverlimitations Only 1 feed per installation No UI: up toyoutobuildit No granular security: only 1 API-keyforentire feed Conclusion: requiresyoutodevelopifyou want something more useful
Meet MyGet www.myget.org NaaS Register and off you go! (no dev) Supports Enterprise scenarios Granular security Package mirroring
MyGet Demo Log in to www.myget.org and get started
Continuous (Package) Integration Fetch the chickens when you need them
Typical source control... Contains /References (if you are lucky) ...and also Project/_bin_deployable_assemblies ...and also /References/old ...and also /..././../.././References Usually references GAC-ed assemblies
Dependencies Software has dependencies. Deal with it. But are those YOUR intellectual property? YOUR reason to build software? YOUR product? No. They are dependencies. And they don’t belong in source control.
Continuous (Package) Integration Can I get rid of all these referencedassembliesduplicatedall-over my source control system? ,[object Object],Do I needtoinstallandmaintainNuGet on allmybuildagents? ,[object Object],[object Object]
3rd partiesdon’tbelong in your SCM Source control bloatedwiththird-party binaries? Replacethem with NuGet packages Commitpackages.config/repositories.config files Preferablynot the packages Use NuGetPowerTools Enable-PackageRestore
Problem! NuGet feed is subject to change... PackageSourceMSBuild property to the rescue NuGet.settings.targets in $(SolutionDir)nuget folder Nowwhat... Host yourown feed andmirrorthird-party packages InternalNuGet.Server Network Share Or useMyGetforthat
Organizeyourchickens Feed structuring Scopedbyquality: Build, QA, Production, … Scopedbyaudience: public, restricted access Other:  Scopedby product version, milestone… Scopedby target platform
(Ab)using NuGet
Guidance Publishing a package bringsgreatresponsibility Breakingchanges in your packages shouldbeversionedaccordingly! Consumersmightchooseto no longerconsumeany packages youpublished
Guidance Package Integration ≠ Integration Testing CI buildsreflect output of source control input Same input alwaysproducessame output Do not auto-update packages duringautomatedbuilds!
(Ab)using NuGet? Change of perspective NuGet as a package manager NuGet as a protocol for distributing packages
ExtendingNuGet Scaffolding, CmdLets, Plug-ins, …
Scaffolding T4, Mvc, … CreateyourownPowerShellcmdlets Automate Visual Studio (access to DTE)
Automate deployments Build results in .nupkg Octopus deploys to its tentacles Test tentacles Staging tentacles Production tentacles www.octopusdeploy.com
NuGet command line plug-ins Extend NuGet.exe Custom Commands How? Build class library Reference NuGet.exe Inherit Command Deploy your dll to %LocalAppData%uGetommands
Chocolatey NuGet developer library packages Chocolatey applications and tools packager “yum” or “apt-get” for Windows www.chocolatey.org
Chocolatey Demo NuGet desert
Orchard / WebMatrix / … NuGetnotboundto VS Orchard CMS: modules & themes WebMatrix: install page helpers on the fly Yourapp: offer pluginsthrough a repo
Conclusion
Dependencies & people are chickens ,[object Object],Set up your own NuGet repository for various reasons Continuous package integration NuGet is a package manager ,[object Object],Conclusion
Thank you! Any questions? http://blog.maartenballiauw.be  @maartenballiauw  http://www.xavierdecoster.com @xavierdecoster
Organize your chickens: NuGet for the enterprise

Mais conteúdo relacionado

Mais procurados

Dalvik Vm & Jit
Dalvik Vm & JitDalvik Vm & Jit
Dalvik Vm & Jit
Ankit Somani
 
OpenStack: Inside Out
OpenStack: Inside OutOpenStack: Inside Out
OpenStack: Inside Out
Etsuji Nakai
 

Mais procurados (20)

Containers, Docker, and Security: State Of The Union (LinuxCon and ContainerC...
Containers, Docker, and Security: State Of The Union (LinuxCon and ContainerC...Containers, Docker, and Security: State Of The Union (LinuxCon and ContainerC...
Containers, Docker, and Security: State Of The Union (LinuxCon and ContainerC...
 
Docker and Puppet — Puppet Camp L.A. — SCALE12X
Docker and Puppet — Puppet Camp L.A. — SCALE12XDocker and Puppet — Puppet Camp L.A. — SCALE12X
Docker and Puppet — Puppet Camp L.A. — SCALE12X
 
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3 Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
 
Node js meetup
Node js meetupNode js meetup
Node js meetup
 
Introduction to node.js By Ahmed Assaf
Introduction to node.js  By Ahmed AssafIntroduction to node.js  By Ahmed Assaf
Introduction to node.js By Ahmed Assaf
 
Dalvik Vm & Jit
Dalvik Vm & JitDalvik Vm & Jit
Dalvik Vm & Jit
 
Distribute cloud-environment-on-ubuntu-14-04-with-Docker
Distribute cloud-environment-on-ubuntu-14-04-with-DockerDistribute cloud-environment-on-ubuntu-14-04-with-Docker
Distribute cloud-environment-on-ubuntu-14-04-with-Docker
 
Dev to Delivery with Puppet, Vagrant and AWS
Dev to Delivery with Puppet, Vagrant and AWSDev to Delivery with Puppet, Vagrant and AWS
Dev to Delivery with Puppet, Vagrant and AWS
 
Getting started with developing Nodejs
Getting started with developing NodejsGetting started with developing Nodejs
Getting started with developing Nodejs
 
Lightweight Virtualization: LXC containers & AUFS
Lightweight Virtualization: LXC containers & AUFSLightweight Virtualization: LXC containers & AUFS
Lightweight Virtualization: LXC containers & AUFS
 
ConFoo - NuGet beyond Hello World
ConFoo - NuGet beyond Hello WorldConFoo - NuGet beyond Hello World
ConFoo - NuGet beyond Hello World
 
Docker, Linux Containers, and Security: Does It Add Up?
Docker, Linux Containers, and Security: Does It Add Up?Docker, Linux Containers, and Security: Does It Add Up?
Docker, Linux Containers, and Security: Does It Add Up?
 
Puppet and Vagrant in development
Puppet and Vagrant in developmentPuppet and Vagrant in development
Puppet and Vagrant in development
 
PuppetConf 2016: Getting to the Latest Puppet – Nate McCurdy & Elizabeth Witt...
PuppetConf 2016: Getting to the Latest Puppet – Nate McCurdy & Elizabeth Witt...PuppetConf 2016: Getting to the Latest Puppet – Nate McCurdy & Elizabeth Witt...
PuppetConf 2016: Getting to the Latest Puppet – Nate McCurdy & Elizabeth Witt...
 
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...
 
How to master OpenStack in 2 hours
How to master OpenStack in 2 hoursHow to master OpenStack in 2 hours
How to master OpenStack in 2 hours
 
OpenStack: Inside Out
OpenStack: Inside OutOpenStack: Inside Out
OpenStack: Inside Out
 
Cluster management (supercomputer)
Cluster management (supercomputer)Cluster management (supercomputer)
Cluster management (supercomputer)
 
Drush in the Composer Era
Drush in the Composer EraDrush in the Composer Era
Drush in the Composer Era
 
Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.js
 

Destaque (7)

Implementation of community package manager
Implementation of community package managerImplementation of community package manager
Implementation of community package manager
 
Approaching package manager
Approaching package managerApproaching package manager
Approaching package manager
 
]project-open[ Package Manager
]project-open[ Package Manager]project-open[ Package Manager
]project-open[ Package Manager
 
Steps in Rearing Chickens
Steps in Rearing ChickensSteps in Rearing Chickens
Steps in Rearing Chickens
 
Mr. Rajneesh Gupta Speaker at Knowledge Day 2015
Mr. Rajneesh Gupta Speaker at Knowledge Day 2015 Mr. Rajneesh Gupta Speaker at Knowledge Day 2015
Mr. Rajneesh Gupta Speaker at Knowledge Day 2015
 
Project on Poultry
Project on PoultryProject on Poultry
Project on Poultry
 
]project-open[ Screenshots
]project-open[ Screenshots ]project-open[ Screenshots
]project-open[ Screenshots
 

Semelhante a Organize your chickens: NuGet for the enterprise

An overview of the NuGet ecosystem - Mobel.io
An overview of the NuGet ecosystem - Mobel.ioAn overview of the NuGet ecosystem - Mobel.io
An overview of the NuGet ecosystem - Mobel.io
Maarten Balliauw
 
From Dev to DevOps - Codemotion ES 2012
From Dev to DevOps - Codemotion ES 2012From Dev to DevOps - Codemotion ES 2012
From Dev to DevOps - Codemotion ES 2012
Carlos Sanchez
 
From Dev to DevOps - ApacheCON NA 2011
From Dev to DevOps - ApacheCON NA 2011From Dev to DevOps - ApacheCON NA 2011
From Dev to DevOps - ApacheCON NA 2011
Carlos Sanchez
 
From Dev to DevOps - FOSDEM 2012
From Dev to DevOps - FOSDEM 2012From Dev to DevOps - FOSDEM 2012
From Dev to DevOps - FOSDEM 2012
Carlos Sanchez
 
5 minute intro to virtualenv
5 minute intro to virtualenv5 minute intro to virtualenv
5 minute intro to virtualenv
amenasse
 
From Dev to DevOps - Apache Barcamp Spain 2011
From Dev to DevOps - Apache Barcamp Spain 2011From Dev to DevOps - Apache Barcamp Spain 2011
From Dev to DevOps - Apache Barcamp Spain 2011
Carlos Sanchez
 

Semelhante a Organize your chickens: NuGet for the enterprise (20)

An overview of the NuGet ecosystem - Mobel.io
An overview of the NuGet ecosystem - Mobel.ioAn overview of the NuGet ecosystem - Mobel.io
An overview of the NuGet ecosystem - Mobel.io
 
NuGet beyond Hello World - DotNext Piter 2017
NuGet beyond Hello World - DotNext Piter 2017NuGet beyond Hello World - DotNext Piter 2017
NuGet beyond Hello World - DotNext Piter 2017
 
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
 
Understanding NuGet implementation for Enterprises
Understanding NuGet implementation for EnterprisesUnderstanding NuGet implementation for Enterprises
Understanding NuGet implementation for Enterprises
 
Nuget is easier than you think and you should be using it as both a consumer ...
Nuget is easier than you think and you should be using it as both a consumer ...Nuget is easier than you think and you should be using it as both a consumer ...
Nuget is easier than you think and you should be using it as both a consumer ...
 
Hosting your own NuGet private repository
Hosting your own NuGet private repositoryHosting your own NuGet private repository
Hosting your own NuGet private repository
 
Organize your Chickens - NuGet for the Enterprise (UGIALTNET)
Organize your Chickens - NuGet for the Enterprise (UGIALTNET)Organize your Chickens - NuGet for the Enterprise (UGIALTNET)
Organize your Chickens - NuGet for the Enterprise (UGIALTNET)
 
Intro to NuGet
Intro to NuGetIntro to NuGet
Intro to NuGet
 
A DevOps guide to Kubernetes
A DevOps guide to KubernetesA DevOps guide to Kubernetes
A DevOps guide to Kubernetes
 
Getting Started with Azure Artifacts
Getting Started with Azure ArtifactsGetting Started with Azure Artifacts
Getting Started with Azure Artifacts
 
From Dev to DevOps - Codemotion ES 2012
From Dev to DevOps - Codemotion ES 2012From Dev to DevOps - Codemotion ES 2012
From Dev to DevOps - Codemotion ES 2012
 
From Dev to DevOps
From Dev to DevOpsFrom Dev to DevOps
From Dev to DevOps
 
From Dev to DevOps - ApacheCON NA 2011
From Dev to DevOps - ApacheCON NA 2011From Dev to DevOps - ApacheCON NA 2011
From Dev to DevOps - ApacheCON NA 2011
 
From Dev to DevOps - FOSDEM 2012
From Dev to DevOps - FOSDEM 2012From Dev to DevOps - FOSDEM 2012
From Dev to DevOps - FOSDEM 2012
 
5 minute intro to virtualenv
5 minute intro to virtualenv5 minute intro to virtualenv
5 minute intro to virtualenv
 
From Dev to DevOps - Apache Barcamp Spain 2011
From Dev to DevOps - Apache Barcamp Spain 2011From Dev to DevOps - Apache Barcamp Spain 2011
From Dev to DevOps - Apache Barcamp Spain 2011
 
Maven 2 features
Maven 2 featuresMaven 2 features
Maven 2 features
 
Kubernetes for the PHP developer
Kubernetes for the PHP developerKubernetes for the PHP developer
Kubernetes for the PHP developer
 
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
 
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
 

Mais de Maarten Balliauw

Mais de Maarten Balliauw (20)

Bringing nullability into existing code - dammit is not the answer.pptx
Bringing nullability into existing code - dammit is not the answer.pptxBringing nullability into existing code - dammit is not the answer.pptx
Bringing nullability into existing code - dammit is not the answer.pptx
 
Nerd sniping myself into a rabbit hole... Streaming online audio to a Sonos s...
Nerd sniping myself into a rabbit hole... Streaming online audio to a Sonos s...Nerd sniping myself into a rabbit hole... Streaming online audio to a Sonos s...
Nerd sniping myself into a rabbit hole... Streaming online audio to a Sonos s...
 
Building a friendly .NET SDK to connect to Space
Building a friendly .NET SDK to connect to SpaceBuilding a friendly .NET SDK to connect to Space
Building a friendly .NET SDK to connect to Space
 
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo...
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo...Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo...
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo...
 
Indexing and searching NuGet.org with Azure Functions and Search - .NET fwday...
Indexing and searching NuGet.org with Azure Functions and Search - .NET fwday...Indexing and searching NuGet.org with Azure Functions and Search - .NET fwday...
Indexing and searching NuGet.org with Azure Functions and Search - .NET fwday...
 
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
 
JetBrains Australia 2019 - Exploring .NET’s memory management – a trip down m...
JetBrains Australia 2019 - Exploring .NET’s memory management – a trip down m...JetBrains Australia 2019 - Exploring .NET’s memory management – a trip down m...
JetBrains Australia 2019 - Exploring .NET’s memory management – a trip down m...
 
.NET Conf 2019 - Indexing and searching NuGet.org with Azure Functions and Se...
.NET Conf 2019 - Indexing and searching NuGet.org with Azure Functions and Se....NET Conf 2019 - Indexing and searching NuGet.org with Azure Functions and Se...
.NET Conf 2019 - Indexing and searching NuGet.org with Azure Functions and Se...
 
CloudBurst 2019 - Indexing and searching NuGet.org with Azure Functions and S...
CloudBurst 2019 - Indexing and searching NuGet.org with Azure Functions and S...CloudBurst 2019 - Indexing and searching NuGet.org with Azure Functions and S...
CloudBurst 2019 - Indexing and searching NuGet.org with Azure Functions and S...
 
NDC Oslo 2019 - Indexing and searching NuGet.org with Azure Functions and Search
NDC Oslo 2019 - Indexing and searching NuGet.org with Azure Functions and SearchNDC Oslo 2019 - Indexing and searching NuGet.org with Azure Functions and Search
NDC Oslo 2019 - Indexing and searching NuGet.org with Azure Functions and Search
 
Approaches for application request throttling - Cloud Developer Days Poland
Approaches for application request throttling - Cloud Developer Days PolandApproaches for application request throttling - Cloud Developer Days Poland
Approaches for application request throttling - Cloud Developer Days Poland
 
Indexing and searching NuGet.org with Azure Functions and Search - Cloud Deve...
Indexing and searching NuGet.org with Azure Functions and Search - Cloud Deve...Indexing and searching NuGet.org with Azure Functions and Search - Cloud Deve...
Indexing and searching NuGet.org with Azure Functions and Search - Cloud Deve...
 
Approaches for application request throttling - dotNetCologne
Approaches for application request throttling - dotNetCologneApproaches for application request throttling - dotNetCologne
Approaches for application request throttling - dotNetCologne
 
CodeStock - Exploring .NET memory management - a trip down memory lane
CodeStock - Exploring .NET memory management - a trip down memory laneCodeStock - Exploring .NET memory management - a trip down memory lane
CodeStock - Exploring .NET memory management - a trip down memory lane
 
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
 
ConFoo Montreal - Approaches for application request throttling
ConFoo Montreal - Approaches for application request throttlingConFoo Montreal - Approaches for application request throttling
ConFoo Montreal - Approaches for application request throttling
 
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
 
JetBrains Day Seoul - Exploring .NET’s memory management – a trip down memory...
JetBrains Day Seoul - Exploring .NET’s memory management – a trip down memory...JetBrains Day Seoul - Exploring .NET’s memory management – a trip down memory...
JetBrains Day Seoul - Exploring .NET’s memory management – a trip down memory...
 
DotNetFest - Let’s refresh our memory! Memory management in .NET
DotNetFest - Let’s refresh our memory! Memory management in .NETDotNetFest - Let’s refresh our memory! Memory management in .NET
DotNetFest - Let’s refresh our memory! Memory management in .NET
 
VISUG - Approaches for application request throttling
VISUG - Approaches for application request throttlingVISUG - Approaches for application request throttling
VISUG - Approaches for application request throttling
 

Último

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Último (20)

Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
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
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 

Organize your chickens: NuGet for the enterprise

  • 1. Organize your chickens NuGet for the Enterprise
  • 2. Who are we? Maarten Balliauw Antwerp, Belgium www.realdolmen.com Focus on web ASP.NET, ASP.NET MVC, PHP, Azure, … MVP Windows Azure (formerly ASP.NET) http://blog.maartenballiauw.be @maartenballiauw
  • 3. Who are we? Xavier Decoster Antwerp, Belgium www.realdolmen.com Focus on web/ALM Visual Studio, TFS, Scrum, ... Silverlight, ASP.NET, ASP.NET MVC, … http://www.xavierdecoster.com @xavierdecoster
  • 4. Agenda Chickens? NuGet Scenarios Host your own NuGet repository Continuous (Package) Integration (Ab)usingNuGet Conclusion
  • 5. Welcome to Dll Hell Dependency Hell
  • 6. WelcometoDependency Hell “A term for the frustrationof software users who have installedsoftware packageswhich have dependencieson specificversionsof other software packages.” Source: Wikipedia
  • 7. Causeand Effect Reinventing the wheel We don’tneedthatdependency “If they can do it, we can do it, but better” Marketing does the versioning People are waitingfor v2 tobuy Let’s call it v4 Platform Update SP3 November Edition KB2348063 RTW Refresh  Whathappenedtoreuse of components?  We lost ownership of AssemblyVersion ?
  • 9. Package Management NuGet to the Rescue! “NuGet is a Visual Studio extension that makes it easy to install and update open source libraries and tools in Visual Studio.”
  • 10. Package What? Package Management Simple concept Find Packages (Re)Use Packages Produce Packages “…a collection of software tools to automate the process of installing, upgrading, configuring, and removingsoftware packages…” Wikipedia
  • 11. GettingStarted Tooling: NuGet Package Manager (http://nuget.org) NuGet Package Explorer (http://npe.codeplex.com) Install-Package NuGetPowerTools Install-Package NuGet.CommandLine Guidanceanddocumentation http://docs.nuget.org
  • 12. Consuming Packages Simple as adding a reference
  • 13. Onedialogtorulethemall… Install-Package Update-Package Uninstall-Package Settings Package Sources Local (offline) Cache location Also: Manage packages on solution level! Right-click solution > Manage NuGet Packages…
  • 14. NuGet Package Manager Console PowerShellenabled! Extensible! Scaffolding, NuGetPowerTools, … %UserProfile%ocumentsindowsPowerShelluGet_profile.ps1
  • 15. Configurable Package Sources Configurablethrough… NuGet Library Package Manager (VS add-in) NuGet.config (in %APPDATA%oaminguGetuGet.config) NuGet.settings.targets (MSBUILD file part of NuGetPowerTools)
  • 16. Creating Packages What’s a package? Just a zip-filecontaining: … content and source code (tobeinjectedinto target project) … PowerShell scripts andexecutables … configuration file and source code transformations http://docs.nuget.org/docs/creating-packages/Configuration-File-and-Source-Code-Transformations
  • 17. Package Conventions Conventions http://docs.nuget.org/docs/creating-packages/Package-Conventions Folder structure Tools (init.ps1, install.ps1, uninstall.ps1) Content Manifest (.nuspec file) Lib
  • 18. NuGet Manifest Specification NuSpec manifest XML file (with XSD available) Package metadata
  • 19. Semantic Versioning Think about your versioning! (semver.org) Always specifylowerbound Use a version range (lowerbound + upperbound) whenversioning of package youdepend on is messed up
  • 20. Advanced usage scenarios Host your own NuGet repository Continuous (Package) Integration (Ab)using NuGet
  • 21. Hosting your own repository Those chickens are mine!
  • 22. Hosting your own repository NuGet = public feed Privacy Intellectual property NuGet maintained by package authors Author removes v1.0.45 and you depend on it
  • 23. Solutions Folder / File share Orchard Gallery (or NuGet Gallery) NuGet.Server package MyGet
  • 25. NuGet.Serverlimitations Only 1 feed per installation No UI: up toyoutobuildit No granular security: only 1 API-keyforentire feed Conclusion: requiresyoutodevelopifyou want something more useful
  • 26. Meet MyGet www.myget.org NaaS Register and off you go! (no dev) Supports Enterprise scenarios Granular security Package mirroring
  • 27. MyGet Demo Log in to www.myget.org and get started
  • 28. Continuous (Package) Integration Fetch the chickens when you need them
  • 29. Typical source control... Contains /References (if you are lucky) ...and also Project/_bin_deployable_assemblies ...and also /References/old ...and also /..././../.././References Usually references GAC-ed assemblies
  • 30. Dependencies Software has dependencies. Deal with it. But are those YOUR intellectual property? YOUR reason to build software? YOUR product? No. They are dependencies. And they don’t belong in source control.
  • 31.
  • 32. 3rd partiesdon’tbelong in your SCM Source control bloatedwiththird-party binaries? Replacethem with NuGet packages Commitpackages.config/repositories.config files Preferablynot the packages Use NuGetPowerTools Enable-PackageRestore
  • 33. Problem! NuGet feed is subject to change... PackageSourceMSBuild property to the rescue NuGet.settings.targets in $(SolutionDir)nuget folder Nowwhat... Host yourown feed andmirrorthird-party packages InternalNuGet.Server Network Share Or useMyGetforthat
  • 34. Organizeyourchickens Feed structuring Scopedbyquality: Build, QA, Production, … Scopedbyaudience: public, restricted access Other: Scopedby product version, milestone… Scopedby target platform
  • 36. Guidance Publishing a package bringsgreatresponsibility Breakingchanges in your packages shouldbeversionedaccordingly! Consumersmightchooseto no longerconsumeany packages youpublished
  • 37. Guidance Package Integration ≠ Integration Testing CI buildsreflect output of source control input Same input alwaysproducessame output Do not auto-update packages duringautomatedbuilds!
  • 38.
  • 39. (Ab)using NuGet? Change of perspective NuGet as a package manager NuGet as a protocol for distributing packages
  • 41. Scaffolding T4, Mvc, … CreateyourownPowerShellcmdlets Automate Visual Studio (access to DTE)
  • 42. Automate deployments Build results in .nupkg Octopus deploys to its tentacles Test tentacles Staging tentacles Production tentacles www.octopusdeploy.com
  • 43.
  • 44. NuGet command line plug-ins Extend NuGet.exe Custom Commands How? Build class library Reference NuGet.exe Inherit Command Deploy your dll to %LocalAppData%uGetommands
  • 45. Chocolatey NuGet developer library packages Chocolatey applications and tools packager “yum” or “apt-get” for Windows www.chocolatey.org
  • 47. Orchard / WebMatrix / … NuGetnotboundto VS Orchard CMS: modules & themes WebMatrix: install page helpers on the fly Yourapp: offer pluginsthrough a repo
  • 49.
  • 50. Thank you! Any questions? http://blog.maartenballiauw.be @maartenballiauw http://www.xavierdecoster.com @xavierdecoster

Notas do Editor

  1. Maarten
  2. Maarten
  3. Xavier
  4. Xavier
  5. Xavier
  6. XavierMaarten
  7. Maarten
  8. NuGet Install-PackageWhen you use NuGet to install a package, it copies the library files to your solution and automatically updates your project (add references, change config files, etc). NuGet Uninstall-PackageIf you remove a package, NuGet reverses whatever changes it made so that no clutter is left.
  9. Xavier: Terugverwijzen naar “Marketing versioning”
  10. Xavier
  11. Maarten
  12. Maarten
  13. Maarten
  14. XavierStart with empty MVC template + addNuGet.ServerpkgRun siteDrop pkgs in packages folderRefresh browserFeed toevoegen in VS & show pkgs
  15. Xavier
  16. Maarten
  17. MaartenInloggen en feed aanmakenPackage pushen vanuit NPEFeed toevoegen aan VSOp MyGet feed security instellenPackage installen in VS en tonen dat er basic auth bijkomtPackage vanNuGet toevoegen op MyGet en tonen dat je alle dependencies kan meepakken, mirroring, … en dat je ook gewoon van uw packages.config kan toevoegen
  18. Xavier
  19. Xavier
  20. Xavier
  21. Maarten
  22. Maarten
  23. Xavier- Het feit dat NuGet.org geen garanties biedt op content- Wat als mensen packages verwijderen? BUILD breaks, DEVS unhappy again
  24. Maarten -> Xavier
  25. Xavier
  26. Xavier
  27. Xavier
  28. Maarten
  29. Maarten
  30. TODO Scaffolding? Toevoegen van functies?Eventueel de NuGet.exe plugins ook nog tonen?
  31. Maarten
  32. Maarten
  33. Xavier
  34. Xavier
  35. Maarten
  36. XavierMaartenXavierMaarten