NuGet Package Management in VSTS

Posted by: Subodh Sohoni , on 12/29/2017, in Category VSTS & TFS
Views: 9493
Abstract: NuGet can be used to create, distribute and consume packages. Learn how to do NuGet Package Management in Visual Studio Team System.

Teams working on Non-trivial software development projects may need to use components that are either created by them or by some external company. These components can be packaged and distributed using various technologies like NPM, Maven, RPM etc.

In this article, we will see how to create, distribute and consume packages in VSTS, that are created using NuGet.

Concept of NuGet

In 2010, Microsoft introduced the technology of NuGet that makes it easier to package and consume components, resources, contents etc. Before we go to check how VSTS makes package creation and distribution simple, let us understand some of the concepts related to NuGet.

NuGet packages have an extension of .nupkg that are essentially ZIP files containing all the resources to be distributed. It also contains a file with extension .nuspec which is an XML file containing the details of the package including the dependencies.

NuGet packages can be stored at a location that is convenient to the team. These locations are called feeds.

A feed can be an external server hosted by NuGet.org or Microsoft. It can also be internal to the team in a network share or a folder in the file system. NuGet packages are consumed through a command line tool that is integrated in Visual Studio or in the NuGet Package Manager, which is a GUI extension to Visual Studio.

nuget-package-creation

Figure 1 – Package Creation and Consumption Process

Packaging Extension of VSTS

Let us now move on to using VSTS to create a NuGet Package.

Here we are assuming that we are creating a component in the form of a class library using an appropriate project template in Visual Studio. This project itself may consume some external components that are added through some NuGet packages.

We have an option to create a NuSpec file or to retain the details of these used NuGet packages in the project file ( .csproj file). Once we have finished coding the component, we can put that code under version control. We are using VSTS – git as our version control, so we do a commit and then Push changes to a shared repository in a team project on VSTS.

version-control

Figure 2 – Code Under Version Control

We will now create a build definition to do a build of this code using the Build service of VSTS.

We will open the builds page from Build and Release menu item. An extension called Packages is required for this build. This extension is available from Microsoft Visual Studio Marketplace.

To install it, let us click the marketplace icon on the top right corner of the page. On the marketplace, search for Packages and install it. Select the subscription name and provide the authorization for this installation.

This extension is a paid extension. It is free for first month, followed by a free use for only 5 users in the subscription. Once it is installed, we will need to create our first feed. This feed will store packages on the VSTS storage itself.

crreate-new-feed

Figure 3 – Create New Feed

Let us give the name of our organization as a name of the feed. I have given the name “SSGS” for my feed. I have made this feed visible to my entire account and allowed it to download packages from any public upstream feed.

Note down the name of the feed and the URL of the feed.

open-feed-url

Figure 4 – Open Feed to View URL

The feed name and url will be required later when we consume the packages that we put on this feed.

Build Definition to Create and Push Package

Let us now reopen the Build page. On this page, create a new build definition. Since we are using the class library project, we should select the template of .NET Desktop.

create-build-definition

Figure 5 – Create Build Definition With

This template will add all the basic necessary tasks. We can select to use either the Hosted agent or we can install and use the on premises agent.

agent-solution

Figure 6 – Agent and Solution Selection

On the tasks page, we can see various tasks to restore NuGet packages that are used in the project, to compile the project and to copy and publish artifacts. We would like to package the output of compilation into a NuGet package and then push that package on our feed.

Let us now add the NuGet task below the Publish Artifact task.

add-nuget-task-build

Figure 7 – Add NuGet Task to Build Definition

This task exposes many operations that are related to NuGet like pack, push, restore etc.

For this newly added task, we will select the Pack operation. For this operation, we will provide the .nuspec file or the .csproj file, whichever may be applicable. This file will provide the upstream packages which are dependencies for our package.

nuget-task-pack-op

Figure 8 – NuGet Task Pack Operation

After this step, add another NuGet task. This NuGet task will push the created package to our feed. Let us select the Push operation from drop down. Now we will need to select a feed, which is naturally going to be the feed that we had created earlier.

nuget-task-push-op

Figure 9 – NuGet Task Push Operation

Now trigger the build.

After the build is successfully over, check the feed to know if the package has been uploaded or not. We will find the package with the same name as our class library that is uploaded by the build.

Consuming NuGet package from out feed

Let us now find out how to consume that package from the feed we just created.

To do so, open Visual Studio. In Visual Studio, open the menu item Tools > Options > NuGet Packages Manager > Package Sources. This usually has a source that is automatically added. The source reflects the feed created by Microsoft for their components that we use in our applications. We will add the source for our feed.

To add the feed as package source, we need the name and the URL of that feed which we noted earlier. Now click on the green + sign at the top (see Figure 10). This opens a dialog box to enter the new source.

nuget-package-source

Figure 10 – Add NuGet Package Source

We will enter the name and URL of our feed in that dialog box and click the button to connect to that feed. This way, we have added a new source that reflects our NuGet feed in the Visual Studio.

Now we can try to check if this feed provides our uploaded package.

In the Visual Studio, create a new project or open an existing project. In the solution explorer, right click on the project name and select Manage NuGet Packages.

In the window of NuGet Package Manager, select the browse link at the top. Now on the top right corner, from the dropdown for Source Name, select the feed name that we had provided as the package source.

nuget-package-selection

Figure 11 – NuGet Package Selection from Created Feed

It will show the package that was uploaded by the build. Select that package and click the Install button. It will copy the dll that is created by our class library project in our new project and add a reference to it.

Summary

Distributing packages that can be used by our team members is made easy by support of Packaging extension in VSTS. It allows to create feed for packages that can be consumed by our team members and build tasks that can create packages and push those to the feed.

Was this article worth reading? Share it with fellow developers too. Thanks!
Share on LinkedIn
Share on Google+
Further Reading - Articles You May Like!
Author
Subodh is a consultant and corporate trainer. He has overall 28+ years of experience. His specialization is Application Lifecycle Management and Team Foundation Server. He is Microsoft MVP – VS ALM, MCSD – ALM and MCT. He has conducted more than 300 corporate trainings and consulting assignments. He is also a Professional SCRUM Master. He guides teams to become Agile and implement SCRUM. Subodh is authorized by Microsoft to do ALM Assessments on behalf of Microsoft. Follow him on twitter @subodhsohoni


Page copy protected against web site content infringement 	by Copyscape




Feedback - Leave us some adulation, criticism and everything in between!

Categories

JOIN OUR COMMUNITY

POPULAR ARTICLES

FREE .NET MAGAZINES

Free DNC .NET Magazine

Tags

JQUERY COOKBOOK

jQuery CookBook