.Net Assembly Binding Redirect with Differing Public Key Tokens

Russell Giddings picture Russell Giddings · Feb 3, 2010 · Viewed 21.1k times · Source

Is it possible to perform an assembly binding redirect between different versions of a referenced assembly if the public key token is null on the older version and set on the newer version?

For example, I have two assemblies...

System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

and

System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

Should the following assembly binding redirect work in the Asp.Net web.config...

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

Answer

Mark Worth picture Mark Worth · Feb 3, 2010

No, it is not possible. The assemblies need to have the same publicKeyToken.

The bindingRedirect tag only has the oldVersion and newVersion attributes, so there's no way to tell it about the "null" version anyway.

But the real reason behind is explained due to the strong name mechanism