为什么在添加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呢?
为什么我需要这个bindingRedirect
?
程序集Microsoft.Threading.Tasks
和Microsoft.Threading.Tasks.Extensions
仍然引用System.Runtime
和System.Threading.Tasks
v1.5.11.0。
如果没有bindingRedirect
, Microsoft.*
程序集会尝试加载旧版本的System.*
程序集,这会失败。
您只是说,只要有介于0.0.0.0到2.5.19.0之间的旧版本,请将该版本replace为2.5.19.0的新版本
假设您的项目中没有可用的旧版本,并且您正在尝试访问它,那么最终会出现“System.IO.FileLoadException:'无法加载文件或程序集”
所以,当你的项目正在寻找一个旧版本的DLL时,它会简单地用新的可用的replace