Событие 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, что позволит вам реализовать собственную схему разрешения сборки.