Reputation: 1242
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'?
Upvotes: 8
Views: 3023
Reputation: 7126
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.
Upvotes: 7