Как всегда перехватывать событие загрузки CLR (не только при неудачной попытке загрузки)

#c# #clr #assemblyresolve

#c# #clr #assemblyresolve

Вопрос:

Я знаю, что это возможно, зарегистрировавшись в AppDomain.Событие AssemblyResolve для обработки попытки загрузить сборку, когда автоматический поиск в среде CLR не удался.

В моем текущем проекте было бы полезно обрабатывать всю загрузку сборки с помощью такого механизма; есть ли способ сделать это?

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

С уважением, Андреа

Комментарии:

1. Это можно сделать через интерфейсы отладчика и профилировщика. Подходит ли это, совершенно невозможно угадать из вашего вопроса. Важно почему .

2. Я загружаю сборки с помощью Assembly. Загрузка (байт[]). Это работает нормально, но случается, что на ту же сборку, которую я только что загрузил, ссылается другой assembly и дважды загружается в AppDomain. Я думаю, что мой лучший вариант избежать этого — получить больший контроль над динамикой загрузки.

3. Ну, это невозможно, если только вы не загружаете его с помощью Assembly. Загрузка (byte[]) также доступна на диске. Переместите его в подкаталог, чтобы среда CLR не смогла его найти. Используйте fuslogvw.exe для устранения проблем с разрешением сборки.