Alex Rivera | Logout

Binding redirect problem in .net

Asked 2009-11-17T21:05:47.563
16

I have a class library called "MyAssembly" that is internally referencing a.dll, b.dll of version 3.1.1.0; I have build the project which outputed MyAssembly.dll. On a different system (box) I have created a web application project and referenced the MyAssembly.dll. the new system has new versions of a.dll and b.dll 4.0.0; I used binding redirect in web.config like below. But still unable to compile the web application. it says missing assembly reference a.dll, version 3.1.1.0.

Could any body help in solving this issue?

Thanks, Suresh

Edit
Report

2 Answers

41

This totally worked for me. NOTE: You need NO namespace on the configuration tag. And you MUST have a namespace on your assemblyBinding tag.

<assemblyBinding> Element for <runtime>

<!-- important: no namespace -->
<configuration> 
  <runtime>
    <!-- important, must have this namespace -->
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly>
        <assemblyIdentity name="Strongly.Named.Assembly" publicKeyToken="xxx" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Do both of those or else it will not read it. If it is giving an error that it cannot load anything but 2.0.0.0 in this example, then it is not picking up the config elements properly.

This also only works on strongly named assemblies. To find out if something is strongly named run the following command from the VC command window

open (start menu > all programs > visual studio > visual studio tools > visual studio command prompt)

Then run:

sn -vf "path-to-assembly.dll"

If it returns that it is valid, then it's strongly named.

source: http://blog.codingoutloud.com/2010/03/13/three-ways-to-tell-whether-an-assembly-dl-is-strong-named/

answered 2012-08-17T18:27:28.983
0

Try this way:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="a.dll"
                      publicKeyToken="{put a.dll publicKeytoken here}"
                      culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-99.99.99.99"
                     newVersion="4.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="b.dll"
                      publicKeyToken="{put b.dll publicKeytoken here}"
                      culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-99.99.99.99"
                     newVersion="4.0.0.0"/>
  </dependentAssembly>
</assemblyBinding>

Also, go to the references of your application, right click the a.dll and b.dll, go to properties and check if "Specific Version" is set to False.

Hope it helps.

answered 2010-04-16T20:45:43.513

Your Answer