Skip to content

Manage Project and Package References with .net CLI

In a previous post, I discussed how to manage and edit solution files using the .net core CLI,

in this post, I will elaborate on that example and discuss how to use the .net core CLI to help manage and edit your Project and Package references using the .net Core CLI.

What are Project and Package References

When developing a software application you will invariably need to make use of third party software libraries in order to extend or enhance functionality within your application.

Libraries and utility modules are already maintained and optimized by other developers. Rather than writing boilerplate code of our own, using a library is often recommended with respect to its use and performance efficiency.

Before you write code against an external component or connected service, your project should have a reference to it. A reference is essentially an entry in a project file that contains the information that you application needs to locate the component or the service.

If you have used other programming languages and frameworks such as PHP, node.js, you may be familiar with Composer and Node Package Manager (npm) respectively.

Composer is a dependency manager for PHP enabling the management of dependencies you require on a project by project basis. This means that Composer will pull in all the required libraries, dependencies and manage them all in one place.

npm is the default Package manager for the JavaScript runtime environment Node.js. As of Node.js version 0.6.3, npm is bundled and installed automatically with the environment. npm runs through the command line and manages dependencies for an application. It also allows users to install Node.js modules that are available on the npm registry.

The .net framework also has package management registries, confusingly there are 3, which ultimately do the same job but in slightly different ways.

  • Nuget
  • Paket
  • dotnet add package

What is Nuget

NuGet is a free and open-source package manager for the Microsoft development platform.

Since its introduction in 2010, NuGet has evolved into a larger ecosystem of tools and services. NuGet is distributed as a Visual Studio extension.

For most users of the Visual Studio IDE this the default means to add packages to your project.

Check out the nuget website to learn more about Nuget

What is Paket

Paket is a dependency manager for .NET and mono projects, which is designed to work well with NuGet packages and also enables referencing files directly from Git repositories or any HTTP resource.

It enables precise and predictable control over what packages the projects within your application reference.

Check out the Paket site for more information

dotnet packages

The .NET Core command-line interface (CLI) is a new cross-platform toolchain for developing .NET applications.

The CLI is a foundation upon which higher-level tools, such as Integrated Development Environments (IDEs), editors, and build orchestrators, can rest.

The dotnet add package provides a convenient option to add a package reference to a project file.

After running the command, a compatibility check is undertaken to ensure the package is compatible with the frameworks in the project. If the check passes, a element is added to the project file and dotnet restore is run.

Check out the .net core tools guide for more information

This is the mechanism we'll be discussing in the remainder of this article. We'll be using this mechanism with Visual Studio Code on Ubuntu.

the instructions are not restricted to either the tool or the operating system. As long as you have access to the CLI you can follow along on any operating system and IDE.

Add packages to your Project

Prior to .net core 2.0, the only way to add references to your project was to edit your project.json or .csproj file. Managing dependencies with .NET Core SDK 1.0

The .net core 2.0 CLI now enables you to do all this jiggery-pokery with a neat and intuituve set of commands.

If you have created your .net project and are familiar with managing and editing your project and solution with the CLI.

In our simple example here, we will create a POCO class library to create Domain Entities for a project. We will create a new Class Library project using dotnet new classlib and give it a name of Api.Domain because it is going to contain our Domain Entities. We will then add our class library to our solution file.


We will now add a reference to Automapper - A convention-based object-object mapper - to our project.

AutoMapper uses a fluent configuration API to define an object-object mapping strategy. AutoMapper uses a convention-based matching algorithm to match up source to destination values. Currently, AutoMapper is designed for model projection scenarios to flatten complex object models to DTOs and other simple objects, whose design is better suited for serialization, communication, messaging, or simply an anti-corruption layer between the domain and application layer.



Nuget website makes it easy for you to get the commands you need to install the package you need. Just Click the .net cli tab and the command will be displayed.

Open your .csproj in VS Code and you will see you project now has a reference to Automapper


You can continue to add as many references you need using the process defined.

Add Project References

During the course of software development will now doubt require to either reference your project to other projects.  For instance, in the case of our example we may want to create a Unit Test project and add a reference to our Domain project to start creating unit tests.


We have now created our Unit Test project and added it to our solution file.  Now we can add a reference to our Api.Domain project to our APi.Domain.Tests project


After running that command we will be able to view the Api.Domain.Tests.csproj and confirm our reference exists.


Benefits of the CLI

If you're accustomed to using Visual Studio you might be thinking so what are the benefits to using the CLI when all that we have done here, is just a simple matter in the IDE, all handled by simple mouse clicks.  What are the advantages of doing it this way

  • Cross-platform - Visual Studio is a great tool, but it's not really cross-platform friendly so if you're working on Linux & Mac, it's handy to know CLI
  • Server friendly - There may be instances when you will need to do this when working on a headless server i.e. Build Server etc.


Before the advent of the CLI all these operation were quote possible using IDE and it was possible to acheive the above by hand edit XML files, but it was clunky and fiddly.

The .net core CLI eventually brings the .net framework up to speed with CLI's.

Gary Woodfine
Latest posts by Gary Woodfine (see all)