Предположим, что у меня есть обработчик события AppDomain.AssemblyResolve
, а в обработчике я строю массив байтов и вызывается метод Assembly.Load(byte[])
. Может ли этот метод вызвать событие AssemblyResolve
снова, и заставить мой обработчик быть повторно введен?
Мой вопрос не ограничивается только сборками, которые могут быть сгенерированы с использованием компилятора С#, они могут содержать метаданные abritrary и исполняемый код, поддерживаемые средой CLR.
Я сделал несколько экспериментов и не обнаружил случаев, когда это происходит. Я попытался загрузить сборки, требующие дополнительных ссылок, попытался добавить атрибуты CAS к загруженной сборке, для декодирования которой потребуется другая сборка, попытался загрузить сборку с инициализатором модуля (глобальный метод .cctor
). Ни в коем случае я не заметил, что событие AssemblyResolve
должно быть поднято из метода Assembly.Load(byte[])
, это произошло только в том случае, если какой-то код позже попытался получить доступ к типам, методам или атрибутам в загруженной сборке. Но я могу кое-что упустить.