59

我已经在我的 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.0 重定向到版本 2.0.0.0。

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

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

4

1 回答 1

39

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

你说得对(我只想说“......代码将像引用新版本一样执行”),请参阅http://msdn.microsoft.com/en-us/library/7wd6ex19%28v=vs .110%29.aspx

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

于 2013-02-24T21:13:56.253 回答