I was wondering why nuget added the following code to my applications app.config
file, after installing the Microsoft.Bcl.Async
:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.5.19.0" newVersion="2.5.19.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.5.19.0" newVersion="2.5.19.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
If I remove this XML-element from the config, the app will not work properly.
As far as I understand it, we can use the bindingRedirect
to make the app load a newer or older version of an assembly in case the version we were using when compiling the EXE is gone.
However I am using exactly the version 2.5.19.0
, why would I need a redirect then?
Why do I need this bindingRedirect
?
The assemblies Microsoft.Threading.Tasks
and Microsoft.Threading.Tasks.Extensions
are still referencing v1.5.11.0 of System.Runtime
and System.Threading.Tasks
.
Without the bindingRedirect
, the Microsoft.*
assemblies would try to load an old version of the System.*
assemblies, which would fail.