I have a complex library A
that consists of several c# projects producing the following assemblies:
The library is written by me, and I have full access to its source code. It depends on several NuGet packages, let's say they are:
These libraries (MongoDb driver and EntLib) are not installed in GAC.
I also have a web project B
and I want to use library A
in it as a reference to a DLL (not including projects into solution B
).
The web project depends on several NuGet packages, among them:
Versions of these packages in solutions A
and B
do not match as they are not developed synchronously. Library A
was developed a year ago and used as is since then.
Question: what is the proper way to distribute library A
so that:
A
dependencies are not referenced.A
dependencies, they do not conflict.My current approach:
A.Core, A.Caching, A.Logging, A.MongoDb
.B
uses mongocsharpdriver version 1.5 and lib A
uses version 1.1 (the versions are not that compatible).So, what shall I do? What will be the correct way of dealing with conflict 'references vs. references of references'?
NuGet packages contain . NET library files (assemblies) that are loaded by your application on demand, at runtime. When your application loads these assemblies, it looks for a specific Assembly Version that's embedded within the assembly's DLL file.
The location of the default global packages folder. The default is %userprofile%\. nuget\packages (Windows) or ~/.
The best way to manage shared references is to create your own NuGet package for library A which, among other things, defines any dependencies (including versions) that library A relies on. If you don't want to publish library A to the public NuGet feed, you can host your own feed.
NuGet has some complex dependency resolution rules that will attempt to locate a dependency version that is compatible with your project and its dependencies. Unfortunately, this still won't solve your problem in point 3 above, where your solution and its dependent library use mutually incompatible versions of the same external dependency. In this case, you'll just have to re-work either your solution B or library A so that they use the same version of mongocsharpdriver.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With