A: 

How does memory pressure look on the device? If Program B relies on Assembly C, but there is insufficient memory (virtual or physical) to load assembly C, then you'll get a MissingMethodException (instead of an OutOfMemoryException, which I always thought would make more sense).

ctacke
Memory seems to be enough, I'm now thinking that it might be the problem that I added to my original answer. Could it be that I can't load the same .dll twice?
JayPea
There's no reason they can't use the same assembly. They will each load their own copy (unless it's GACed). They do have to both be compiled to use the same version of the DLL (or have an app config entry telling htem they can load the one present).
ctacke
They should be both compiled to run the same version, since they are on the same solution and the reference is added to a project on the same solution. How could I tell the program to load any version? thanks
JayPea
A: 

Well I made it work by duplicating the referenced code on program B's assembly and removing all references. It is far from elegant, but I couldn't get it to work any other way. If anyone has any idea of what might have gone wrong I would greatly appreciate it. It might come in handy some other time. Thanks

JayPea