在web.config>配置>运行时> assemblyBinding中生成条目的含义/原因是什么?

时间:2013-02-24 20:50:13

标签: c# asp.net web-config 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是具有public的依赖程序集的名称   31bf3856ad364e35的关键标记。通过重定向版本1.0.0.0   2.0.0.0到版本2.0.0.0。

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

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

1 个答案:

答案 0 :(得分:33)

  

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

你说得对(我只会说“......代码将执行为 如果它引用了较新的版本“),请参阅http://msdn.microsoft.com/en-us/library/7wd6ex19%28v=vs.110%29.aspx

  

“针对特定内容构建.N​​ET Framework应用程序时   应用程序使用该版本的强名称程序集的版本   在运行时的程序集。但是,有时你可能想要   应用程序针对较新版本的程序集运行。“