/dotnet-consolidate

.NET core command-line tool that verifies that all NuGet packages in a solution are consolidated

Primary LanguageC#MIT LicenseMIT

dotnet consolidate

Build status Quality Gate Status NuGet

.NET core tool that verifies that all NuGet packages in a solution are consolidated.

Developers typically consider it bad practice to use different versions of the same NuGet package across different projects in the same solution.

https://docs.microsoft.com/en-us/nuget/consume-packages/install-use-packages-visual-studio#consolidate-tab

The tool finds such discrepancies.

Installation

dotnet tool install dotnet-consolidate --global

Usage

Pass a solution file as a parameter

dotnet consolidate -s YourSolution.sln

or multiple solutions

dotnet consolidate -s YourSolution.sln AnotherSolution.sln

You can also optionally specify the a package ID if you want only a single package to be consolidated

dotnet consolidate -s YourSolution.sln -p PackageId

or a list of package IDs if you want to consolidate multiple, but not all which are referenced in the solution projects

dotnet consolidate -s YourSolution.sln -p PackageID1 PackageID2

Alternatively, you can configure the opposite, package IDs that should be skipped during consolidation:

dotnet consolidate -s YourSolution.sln -e ExcludedPackageID1 ExcludedPackageID2

It's also possible to skip a pattern of versions during consolidation with a regular expression:

dotnet consolidate -s YourSolution.sln --excludedVersionsRegex .*-alpha$

With this, if e.g one of the projects in the solution uses MyPackage v1.0.0, and another project MyPackage v1.1.0-alpha, then no discrepancy will be indicated.

If the tool finds discrepancies between projects (only the specified ones if -p is given), it exits with non-success status code and prints these discrepancies.

Examples

dotnet consolidate -s umbraco.sln

✅ Output:

All packages are consolidated.

dotnet consolidate -s Sentry.sln

❌ Output:

Found 5 non-consolidated packages

----------------------------
Newtonsoft.Json
----------------------------
Sentry - 11.0.2
Sentry - 6.0.8

----------------------------
Microsoft.Extensions.Logging.Configuration
----------------------------
Sentry.Extensions.Logging - 2.1.0
Sentry.Extensions.Logging - 3.0.0

----------------------------
Microsoft.Extensions.DependencyInjection
----------------------------
Sentry.AspNetCore - 2.1.0
Sentry.Extensions.Logging.Tests - 2.1.1
Sentry.Extensions.Logging.Tests - 3.0.0

----------------------------
Microsoft.Extensions.Configuration.Json
----------------------------
Sentry.Extensions.Logging.Tests - 2.1.1
Sentry.Samples.GenericHost - 2.1.1
Sentry.Extensions.Logging.Tests - 3.0.0

----------------------------
Microsoft.AspNetCore.TestHost
----------------------------
Sentry.Testing - 2.1.1
Sentry.Testing - 3.1.0

Testing a development version of the tool locally from source

Run the following commands in src/DotNet.Consolidate:

dotnet build
dotnet pack

The package will be created under bin/Release.

Open the folder of the solution where you want to test the tool, then run:

dotnet tool install dotnet-consolidate --local --add-source  <full path of bin/Release>
dotnet consolidate -s YourSolution.sln

When you're finished, you can also uninstall it to clean up:

dotnet tool uninstall dotnet-consolidate