Выполнение функции в домене приложения - PullRequest
0 голосов
/ 05 февраля 2009

Учитывая .NET DLL, которая состоит из класса «Place» и функции «Where», которая возвращает целое число; Мне нужно загрузить dll в домен приложения, выполнить функцию и выгрузить домен приложения.


Dim domain As AppDomain = AppDomain.CreateDomain("Executor")            
Dim buffer() As Byte = IO.File.ReadAllBytes("c:\path\Locator.dll")
Dim asy As Assembly = domain.Load(buffer)
Dim obj As [Object] = asy.CreateInstance("Locator.Place")
Dim method As MethodInfo = obj.GetType.GetMethod("Where")
Dim result as Integer = method.Invoke(obj, New [Object]() { 1 })
AppDomain.Unload(domain)

Ошибка этой строки:


Dim asy As Assembly = domain.Load(buffer)

С этим сообщением об ошибке:


'Could not load file or assembly 'Place, Version=1.0.0.0, Culture=neutral, PublicKeyToken-null' or one of it's dependencies.  The System Cannot find the specified file.'

Файл находится в буфере, поэтому я предполагаю, что это зависимость .dll. Однако он должен найти их в каталоге базовой программы.

Есть какие-либо идеи относительно причины ошибки?

Буду признателен за любой протестированный пример кода для загрузки сборки в домен приложения, извлечения функции и выгрузки домена приложения.

(Кстати, я гуглил и не нашел полезных образцов.)

Ответы [ 2 ]

1 голос
/ 15 августа 2012

Вы правы, утверждая, что ошибка связана с отсутствующей ссылкой. Ссылка, скорее всего, не может быть разрешена из-за того, как вы загружаете сборку. Поскольку вы загружаете из байтового массива, Assembly.Location не будет указывать на местоположение библиотеки DLL. Поскольку dll, на который вы ссылаетесь, отсутствует в GAC, он не сможет найти ссылочную сборку. Попробуйте загрузить сборку прямо из файла, а не загружать сначала в байтовый массив.

0 голосов
/ 05 февраля 2009

Если вы хотите узнать, какая зависимость не может быть загружена, попробуйте использовать fuslogvw. Чек http://msdn.microsoft.com/en-us/library/e74a18c4(VS.71).aspx

Я нашел объяснение по тексту ссылки довольно хорошо. Он иллюстрирует некоторые подводные камни и предоставляет пример кода, который должен быть легко переведен на VB.NET.

Надеюсь, это поможет.

...