为什么在添加Microsoft.Bcl.Async包之后,将“bindingRedirect”添加到app.config文件中?

我想知道为什么在安装Microsoft.Bcl.Async之后,nuget将下面的代码添加到我的应用程序app.config文件中:

 <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> 

如果我从configuration中删除这个XML元素,应用程序将无法正常工作。

据我了解,我们可以使用bindingRedirect使应用程序加载程序集的较新或较旧版本,以防我们在编译EXE时使用的版本消失。
不过,我正在使用的版本2.5.19.0 ,为什么我需要redirect呢?

我的dll的版本

为什么我需要这个bindingRedirect

程序集Microsoft.Threading.TasksMicrosoft.Threading.Tasks.Extensions仍然引用System.RuntimeSystem.Threading.Tasks v1.5.11.0。

如果没有bindingRedirectMicrosoft.*程序集会尝试加载旧版本的System.*程序集,这会失败。

您只是说,只要有介于0.0.0.0到2.5.19.0之间的旧版本,请将该版本replace为2.5.19.0的新版本

假设您的项目中没有可用的旧版本,并且您正在尝试访问它,那么最终会出现“System.IO.FileLoadException:'无法加载文件或程序集”

所以,当你的项目正在寻找一个旧版本的DLL时,它会简单地用新的可用的replace