Странное поведение при смешивании загрузки сборок с использованием Assembly.LoadFrom и Assembly.Load
Я столкнулся со странным поведением при загрузке сборок с Assembly.LoadFrom и позже с Assembly.Load.
Я загружаю сборку, используя Assembly.LoadFrom, где сборка находится в папке, которая не является папкой выполнения.
Позже в моем тестовом коде, когда я снова пытаюсь загрузить эту сборку с Assembly.Load, происходит сбой загрузки с System.IO.FileNotFoundException («Не удалось загрузить файл или сборку…»), несмотря на то, что сборка уже загружен. Загрузка завершается неудачно как со строгим именем, так и с не строгим именем (первоначальная причина повторной загрузки этой сборки - использование BinaryFormatter).
Однако, если сборка находится в папке выполнения, последующая загрузка будет успешной в обоих случаях со строгим именем и не строгим именем. В этом случае вы можете видеть, что две идентичные сборки загружаются из двух разных мест.
Простой пример кода, воссоздающий эту проблему -
Сборка сборки1 = Assembly.LoadFrom (@ "C: \ a.dll");
// Сбой при загрузке со строгим именем
Assembly Assembly2 = Assembly.Load (@ "a, Версия = 1.0.0.0,
Культура = нейтральная, PublicKeyToken = 14986c3f172d1c2c ");
// Также загрузка с не сильным сбоем
Assembly Assembly3 = Assembly.Load (@ "a");
- Любое объяснение, почему CLR игнорирует уже загруженную сборку?
- Есть идеи, как мне решить эту проблему?
Спасибо.