web.config> configuration> runtime> assemblyBinding中生成的条目是什么意思/原因?

我已经在web.config文件中注意到了这一段,现在我正在试图理解目的是什么:

<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> 

所以,第一个条目似乎是这样说的:

System.Web.Helpers是一个公钥标记为31bf3856ad364e35的从属程序集的名称。 将版本1.0.0.0到2.0.0.0redirect到版本2.0.0.0。

我最好的猜测是,它意味着在ASP.NET运行时环境中执行的任何代码都依赖于具有指定名称的程序集,该程序集也具有指定范围内的版本,就像执行指定版本指定的公钥。

这是否意味着如果我有一个Web项目依赖于一个类库,并且该类库有一个具有一个bindingRedirect的程序集的旧版本的引用,该代码将执行,如果它被编译为较新的版本?

这是否意味着如果我有一个Web项目依赖于一个类库,并且该类库有一个具有一个bindingRedirect的程序集的旧版本的引用,该代码将执行,如果它被编译为较新的版本?

你有它的权利(我只是说“…代码将执行,如果它是引用新版本”),请参阅http://msdn.microsoft.com/en-us/library/7wd6ex19%28v=vs 0.110%29.aspx

“当您针对特定版本的强名称程序集构build.NET Framework应用程序时,应用程序会在运行时使用该版本的程序集,但有时您可能希望应用程序针对程序集的较新版本运行。 “