С MSDN - Управление версиями сборки :
Среда выполнения различает обычные и строгие сборки для управления версиями.Проверка версий происходит только со сборками со строгими именами.
Если у вас do имеется сборка со строгими именами, вы можете перенаправить ссылку на нее.См. MSDN - Перенаправление версий сборки .
В вашем случае вы можете использовать AppDomain.AssemblyResolve
.Вот пример:
AppDomain.CurrentDomain.AssemblyResolve += (sender, eventArgs) =>
{
var fullName = new AssemblyName(eventArgs.Name);
// should check that the assembly is the one we support old versions for
var wantedDLL = fullName.Name + ".dll";
// locate the DLL here... your path will vary
var found = Assembly.LoadFile(Path.Combine(Environment.CurrentDirectory, wantedDLL));
return found;
};
Кроме того, если вы знаете точный номер старой версии, вы можете загрузить его с перегрузкой Assembly.Load(AssemblyName)
.
var fullName = new AssemblyName(eventArgs.Name)
{
Version = new Version(1, 0, 0, 0)
};
return Assembly.Load(fullName);
Вы также должны быть осторожны с ошибками здесь.Создание исключений может привести к странному поведению, и если сборка не загружается, метод будет бесконечно повторяться, что приведет к StackOverflowException
.