Assembly.CreateInstance с разными ссылками на сборки

Я создал архитектуру плагинов, которая поддерживает перезагрузку плагинов и не использует несколько доменов приложений. Я просто создаю новую сборку при изменении dll методом Assembly.Load(Byte[]), а затем создаю экземпляр плагина через myAssembly.CreateInstance(type.FullName). Все работает хорошо и хорошо. Теперь я хотел поддержать то, что плагин может иметь ссылки на сборки, и эти ссылки могут быть изменены на лету. Я реализовал событие Appdomain.AssemblyResolve, и оно работает, конечно, для загрузки ссылок плагина один раз, но не для перезагрузки ссылочных dll при их изменении.

Есть ли способ создать экземпляр из сборки и сообщить ему, какие другие сборки использовать в качестве ссылки?

Небольшое примечание: я знаю о доменах приложений, но не могу их использовать, потому что не хочу сериализовать данные, которые у меня есть в памяти (много ГБ).


person lukebuehler    schedule 20.09.2012    source источник
comment
Что вы имеете в виду под их изменением? Это изменение номера версии? Номера версий проверяются только для подписанных сборок (msdn.microsoft.com/en-us /library/51ket42z.aspx)   -  person fsimonazzi    schedule 25.09.2012
comment
Вы должны добавить более подробное описание того, что вы пытаетесь сделать. Как упоминал fsimonazzi, части, когда они меняются, и теперь я хотел поддержать, что плагин может иметь ссылки на сборки, и эти ссылки могут быть изменены на лету, довольно расплывчаты.   -  person Panos Rontogiannis    schedule 26.09.2012


Ответы (1)


.NET найдет ваши ссылки в соответствии с полным именем сборки, а AssemblyResolve сработает только в том случае, если .NET уже не может автоматически разрешить искомую сборку (путем сопоставления полного имени и контекста загрузки с загруженной сборкой или загрузки из пути проверки). ).

Поэтому, если вы уже разрешили конкретный ссылочный тип или он разрешен автоматически, у вас не будет возможности загрузить его откуда-то еще. Кроме того, поскольку сборки (идентифицируемые по полному имени сборки), загруженные в определенном контексте в данном домене приложения, не могут быть выгружены, вы не сможете выгрузить/повторно загрузить эти сборки, на которые есть ссылки, в том же домене приложения.

person rupertb    schedule 03.10.2012