Получение информации о DLL в .NET

Моя проблема:

Имея список путей к DLL, найдите номер их версии и все сборки, на которые есть ссылки. Некоторые могут указывать на одну и ту же DLL, но с другим путем или версией.

Мой код:

Dim otherDomain As AppDomain = AppDomain.CreateDomain("otherDomain")

otherDomain.DoCallBack(Sub()
                            Assembly.ReflectionOnlyLoadFrom("filePath")
                       End Sub)

Dim assemblies As New List(Of Assembly)(otherDomain.ReflectionOnlyGetAssemblies())

Последняя строка выдает:

Не удалось загрузить файл или сборку «файл», версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = null или одна из ее зависимостей. Система не может найти указанный файл.

Если бы эта строка работала, я бы просто сказал:

assemblies(0).GetName.version.tostring
assemblies(0).GetReferencedAssemblies

а затем выгрузите домен приложения.


person user699362    schedule 08.04.2011    source источник


Ответы (1)


Проблема здесь может быть связана с SetupInformation для нового AppDomain. Когда вы создаете свой новый AppDomain, попробуйте создать его следующим образом, чтобы он наследовал ту же информацию о безопасности и настройках, что и существующий AppDomain:

AppDomain.CreateDomain("otherDomain", AppDomain.CurrentDomain.Evidence, AppDomain.CurrentDomain.SetupInformation);

Местоположения поиска сборки для нового AppDomain теперь будут соответствовать исходному AppDomain, и ваша сборка должна быть найдена.

person Ross Anderson    schedule 09.04.2011
comment
Я на самом деле уже пробовал это, и он дает те же результаты - person user699362; 11.04.2011