Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NuGet: Necessary to reference implicit dependencies?

I recently upgraded from ASP.NET Core 2.2. to 3.0. With the changes regarding their meta packages, I'm now in a state where everything works, but some pretty important packages are not explicitly referenced. Everything works because, they're implicitly referenced. For example:

enter image description here

You can see that I'm explicitly referencing Microsoft.EntityFrameworkCore.SqlServer, however I am NOT referencing Microsoft.EntityFrameworkCore explicitly. It's still pulled in because it's an indirect reference it seems.

My question is: is this a reasonable project configuration? Is there any advantage to pulling in Microsoft.EntityFrameworkCore explicitly? I imagine there may be implications in terms of version upgrades.

Thanks...

like image 692
BenjiFB Avatar asked Sep 26 '19 13:09

BenjiFB


People also ask

Do NuGet packages include dependencies?

Any time a package is installed or reinstalled, which includes being installed as part of a restore process, NuGet also installs any additional packages on which that first package depends. Those immediate dependencies might then also have dependencies on their own, which can continue to an arbitrary depth.

Is Paket better than NuGet?

Paket is an alternative to the default nuget package manager used in Visual Studio. Paket is completely compatible with nuget, but is much more feature rich and provides real-world benefits for library developers.


1 Answers

Is this a reasonable project configuration?

Yes. Transitive dependencies are absolutely a thing in SDK-style projects, and in my experience they make life much simpler.

I would only add a redundant NuGet reference in order to specifically upgrade that package - and I'd be careful only do to that for minor releases. For example, if I use package A v1.0 that depends on package B v1.1, I might add a dependency on package B to upgrade to v1.2, but not to v2.0.

like image 77
Jon Skeet Avatar answered Nov 02 '22 23:11

Jon Skeet