Never assume anything, test everything
All these years I assumed that Assembly.Load() would respect version numbers if specified in the FullName string. As I’ve been adding more test coverage to Microsoft.Activities I found that Assembly.Load does not work that way.
Suppose you have an assembly named ActivityLibrary and you deploy V1 but you try to load V2
// This call will succeed and happily load V1 if it finds ActivityLibrary.dll
Assembly.Load("ActivityLibrary, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null");
To force Assembly.Load to respect the version number you must sign the assembly
// Try to load V2 this call will fail if it cannot find V2
Assembly.Load("ActivityLibrary, Version=2.0.0.0, Culture=neutral, PublicKeyToken=824701d2ab05d638");
So be careful out there and sign your assemblies.