Событие AppDomain, которое вызывается для *ATTEMPTED* разрешения сборки

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

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

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

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

Какие-либо предложения?

2 ответа

Решение

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

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

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

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

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

Другие вопросы по тегам