A: 

Your "problem", such that it is, is that there is a policy file installed that specifies that requests for 5.1.3102.2180 can be redirected to 5.02.6002.18005

This is, usually, a good thing. it lets applications specify the version they were built against in their manifest, but when critical security fixes are introduced, the OS can redirect apps to compatible versions.

So, whats going to happen here is, your app is going to link against GDI+ 5.1 on any PC that has only 5.1 installed. but any PCs with the 5.2 GDI+, you will be redirected to that.

If you do have an honest to goodness reason why you want to use 5.1, even when 5.2 is available... I think you can use an application config file to manage that.

Create a file called, yourapp.exe.config - if the module in your app thats importing GDI+ is a dll, then it would be thedll.dll.2.config

I am unsure how to structure the bindingRedirect however. i.e. given the policy files redirection, im not sure if you need to redirect the old version back to itself, or the new version back to the old version. or what. some trial and error might be required.

The data in the .config file looks almost exactly like the data in the manifest file. Something like this (which mimics almost exactly the contents of the policy file installed in winsxs thats doing the redirection you dont want).

<configuration>
  <windows>
    <assemblyBinding xmlns=...>
      <dependentAssembly name="GdiPlus...>
        <bindingRedirect oldVersion="5.1.x.x" newVersion="5.1.x.x"/>

To make the choice of "oldVersion" easier, it supports a range syntax. so

oldVersion="5.0.0.0-5.3.0.0"

would be a simple way to ensure that a whole range of GdiPlus versions get redirected to a specific version.

Chris Becke