Справочная DLL - Разрешить предыдущие версии во время выполнения - PullRequest
0 голосов
/ 11 января 2012

У меня задана конкретная версия False для нескольких библиотек DLL в качестве ссылок на консольный проект C #. Я знаю, что это проверка времени компиляции.

Так как я могу разрешить предыдущие версии библиотек DLL во время выполнения?

Спасибо!

1 Ответ

5 голосов
/ 11 января 2012

С 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.

...