Вот сценарий, использующий 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