Top is a big topic; it cannot handle justice in one SO post. Thus, the rupture rate:
These types of fraud are necessary when you use multiple Nuget packages, and they have a common dependency. Like log4net or NewtonSoft.Json, very common libraries that do not have an installer that puts the assembly in the GAC.
The problem is that each Nuget package is likely to be built with a different version of these core support libraries. And such a package is unlikely to receive enough updates to save the current version with the latest version, the author of the package approves the version with which he tested his code. Thus, you can easily get one assembly in your assembly directory in which 1.2.11.0 is requested, and another which requests 1.2.13.0
This will not work. The CLR insists on the exact version when it loads the assembly. And must download it from your build directory and cannot rely on the GAC to deliver them. There can be only one copy of the DLL, it is inevitable that one of the package libraries is going to get the wrong version, and your program crashes. Not good, you have a problem that you cannot solve without restoring the Nuget package.
That referencing binding. This only affects runtime, not build time. He tells the CLR: βIf it asks for 1.2.11.0, just download 1.2.13.0 instead. Or, more generally, with this specific link redirect:β if it asks for any version less than 1.2.13.0. β that the package still works with this newer version. They quite often do it when only the version number is different. However, there are no difficult guarantees.
Another thing that needs to be decided is what happens during the build, which particular version of the library should be selected. Do you want 1.2.11.0 or 1.2.13.0? It does AutoUnify. Nothing complicated, he chooses a higher version.
source share