When do I have to use binding redirects?

Project A uses log4net 1.2.13.0, and depends on Library B, which uses log4net 1.2.11.0. If I do Package Manager Console> Add-BindingRedirect, I get a correct binding redirect in app.config:



<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.2.13.0" newVersion="1.2.13.0" />
</dependentAssembly>


I thought that this one is required in order for the build to complete. But build succeeds without the redirect as well. Here what I see in build log (verbosity set to detailed):



Unified primary reference "log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a". Using this version instead of original version "1.2.11.0" in "C:\Users\vorou\code\ConsoleApplication1\packages\LibraryB.dll" because AutoUnify is 'true'.



What is that AutoUnify all about? Which one is better, i.e. are there any advantages in having an explicit redirect in .config?


Also, as I can remember, in some cases you are required to add binding redirects. Otherwise the app will blow up at runtime. What are these cases and why that AutoUnify magic isn't working for them?