Не может отразить сборку, которая разделяет зависимость другой версии - PullRequest
0 голосов
/ 24 февраля 2010

Вот сценарий, использующий Assembly.ReflectionOnlyLoadFrom :

И моя сборка Проверено и мое отражение Заявка Инспектор Справочная сборка Зависимость .

Если Инспектор ссылки Зависимость 1.0.0.0 и Проверено ссылки Зависимость 1.1.0.0 , Инспектор не может отражать какие-либо типы или методы в Проверено которые используют тип от Зависимость . В тот момент, когда ударил такой тип, я получаю:

System.IO.FileLoadException: не удалось загрузить файл или сборку 'Зависимость, Версия = 1.1.0.0, Культура = нейтральная, PublicKeyToken = null 'или один из его зависимостей. Расположенная сборка определение манифеста не соответствует сборка ссылка. (Исключение из HRESULT: 0x80131040)

Тем не менее, Инспектор может отражать более Зависимость 1.1.0.0 сама по себе очень хорошо, поэтому загрузка Зависимость 1.1.0.0 as Assembly.ReflectionOnlyLoadFrom работает от сборки, которая уже использует Dependency 1.0.0.0 .

Вот код, который я использую для загрузки сборки и предварительной загрузки ее зависимостей:

var assembly = Assembly.ReflectionOnlyLoadFrom(assemblyPath);
foreach (var assemblyName in assembly.GetReferencedAssemblies()) {
  Assembly.ReflectionOnlyLoad(assemblyName.FullName);
}

Это не проблема, если Зависимость 1.1.0.0 не разрешена, так как я установил точку останова в foreach и подтвердил, что она загружена и также проверена AppDomain .CurrentDomain.ReflectionOnlyGetAssemblies () за его наличие. Это загружено хорошо. Но когда я делаю assembly.GetTypes () , он умирает.

Есть ли что-то, что я могу с этим сделать, или мне нужно отразить сборки в отдельном домене приложений и перенести метаданные обратно в домен приложений со ссылкой на Зависимость 1.0.0.0

1 Ответ

0 голосов
/ 24 февраля 2010

В Настройка среды исполнения .NET Framework объясняется, что Load и LoadFrom создают отдельные «области» для загруженных сборок, что, я полагаю, объясняет проблему. Попробуйте что-то найти сами и загрузить их с помощью LoadFrom.

Вы пытались обработать событие AppDomain.AssemblyResolve?

...