2011-07-10 2 views
0

Есть ли какое-то событие, с которым мы можем подключиться, которое получится вызванным ПЕРЕД НАЧАЛОМ решена.Событие AppDomain, вызываемое для * ATTEMPTED * Разрешение сборки

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

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

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

Любые предложения?

ответ

1

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

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 

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

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

+0

Проблема, которую я имею, заключается в том, что код загрузки сборки не написан мной (сторонним). Этот код использует жестко кодированное местоположение для разрешения плагинов. Я хотел бы перехватить этот процесс и быть в состоянии предоставить свое собственное местоположение, поскольку оно вызывает проблемы с распространением моего приложения, которое использует эту стороннюю сторону. –

+0

@liortal, а я задавался вопросом об этом - действительно, этот метод не будет работать, если вы не контролируете процесс загрузки сборок. –

3

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

 Смежные вопросы

  • Нет связанных вопросов^_^