web-dev-qa-db-fra.com

Quelle est la signification / raison des entrées générées dans web.config> configuration> runtime> assemblyBinding?

J'ai remarqué cette section dans mes fichiers web.config pendant un certain temps et j'essaie maintenant de comprendre quel est exactement le but:

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

Ainsi, la première entrée semble dire:

System.Web.Helpers est le nom d'un assembly dépendant avec un jeton de clé publique de 31bf3856ad364e35. Redirigez la version 1.0.0.0 à 2.0.0.0 vers la version 2.0.0.0.

Ma meilleure supposition est que cela signifie que tout code s'exécutant dans le contexte de l'exécution d'ASP.NET qui dépend d'un assembly avec le nom spécifié qui a également une version dans la plage spécifiée s'exécute comme s'il était compilé avec la version spécifiée avec le clé publique spécifiée.

Est-ce à dire que si j'ai un projet Web qui dépend d'une bibliothèque de classes et que cette bibliothèque de classes a une référence à une ancienne version de l'assembly qui a un bindingRedirect, que le code s'exécutera comme s'il était compilé avec la nouvelle version?

48
Aaron Anodide

Est-ce à dire que si j'ai un projet Web qui dépend d'une bibliothèque de classes et que cette bibliothèque de classes a une référence à une ancienne version de l'assembly qui a un bindingRedirect, que le code s'exécutera comme s'il était compilé avec la nouvelle version?

Vous avez raison (je dirais simplement "... le code s'exécutera comme s'il faisait référence à la version plus récente"), voir http://msdn.Microsoft.com/en-us/library/7wd6ex19 % 28v = vs.110% 29.aspx

"Lorsque vous générez une application .NET Framework sur une version spécifique d'un assembly au nom fort, l'application utilise cette version de l'assembly au moment de l'exécution. Cependant, vous souhaiterez parfois que l'application s'exécute sur une version plus récente d'un assembly. "

33
jbl