Событие AppDomain, которое вызывается для * ATTEMPTED * разрешения сборки - PullRequest
0 голосов
/ 10 июля 2011

Есть ли событие, к которому мы можем подключиться, которое называется ДО , сборка разрешена.

Например, если какой-то код в домене приложения вызывает Assembly.Load (путь), событие будет вызвано сообщением об попытке загрузки этой сборки?

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

Выполнение этого также из конфигурации является допустимым вариантом, если это возможно.

Есть предложения?

Ответы [ 2 ]

3 голосов
/ 10 июля 2011

Нет, такого события нет.Одним из возможных способов взлома является преднамеренное неверное конфигурирование свойства AppDomainSetup.ApplicationBase, чтобы CLR никогда не мог найти ни одну из сборок.В этом случае будет вызвано событие AppDomain.AssemblyResolve, что позволит вам реализовать собственную схему разрешения сборки.

1 голос
/ 10 июля 2011

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

public static class AssemblyLoader
{
    public delegate void LoadDelegate(string path);

    public void LoadAssembly(string path)
    {
        if(OnPreLoad != null)
            OnPreLoad(path);
        // load assembly here
    }  // eo LoadAssembly

    public event LoadDelegate OnPreLoad;
} // eo AssemblyLoader

Затем вы можете использовать этот метод в любом месте своего кода, когда вы хотите загрузить сборку.

Очевидно, что здесь, в этом делегате, может потребоваться использовать надлежащий объект (а не только путь), чтобы предотвратить загрузку сборки или сделать что-то другое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...