ti-enxame.com

Qual é o significado / razão para as entradas geradas em web.config> configuration> runtime> assemblyBinding?

Notei esta seção nos meus arquivos web.config por um tempo e agora estou tentando descobrir qual é exatamente o objetivo:

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

Então, a primeira entrada parece dizer:

System.Web.Helpers é o nome de um assembly dependente com um token de chave pública de 31bf3856ad364e35. Redirecione a versão 1.0.0.0 a 2.0.0.0 para a versão 2.0.0.0.

Meu melhor palpite é que isso significa que qualquer código em execução no contexto do tempo de execução do ASP.NET que depende de um assembly com o nome especificado, que também possui uma versão no intervalo especificado, seja executado como se tivesse sido compilado com a versão especificada com o chave pública especificada.

Isso significa que se eu tiver um projeto da Web que dependa de uma biblioteca de classes e essa biblioteca de classes tiver uma referência a uma versão mais antiga do Assembly que possui um bindingRedirect, que o código será executado como se fosse compilado na versão mais recente?

48
Aaron Anodide

Isso significa que se eu tiver um projeto da Web que dependa de uma biblioteca de classes e essa biblioteca de classes tiver uma referência a uma versão mais antiga do Assembly que possui um bindingRedirect, que o código será executado como se fosse compilado na versão mais recente?

Você está certo (eu diria apenas "... o código será executado como se estivesse fazendo referência à versão mais recente"), consulte http://msdn.Microsoft.com/en-us/library/7wd6ex19 % 28v = vs.110% 29.aspx

"Quando você cria um aplicativo .NET Framework em uma versão específica de um Assembly de nome forte, o aplicativo usa essa versão do Assembly em tempo de execução. No entanto, às vezes você pode querer que o aplicativo seja executado em uma versão mais recente de um Assembly. "

33
jbl