У меня есть служба Windows, которая загружает кучу «плагинов», которые являются просто DLL-файлами. Для этого используется отражение:
try
{
Assembly assembly = Assembly.LoadFile("myPlugin.dll");
Type[] types = assembly.GetTypes();
foreach (Type t in types)
{
Type[] ifaces = t.GetInterfaces();
foreach (Type f in ifaces)
{
if (f.Name == "MyPlugin")
{
pType = t;
break;
}
}
if (pType != null)
break;
}
}
catch
{
AddToLog("Failed");
}
obj = Activator.CreateInstance(pType);
object[] Parameters = new object[1];
Parameters[0] = _pluginName;
try
{
pType.InvokeMember("InitializePlugin",
BindingFlags.Default | BindingFlags.InvokeMethod,
null,
obj,
Parameters);
}
catch (Exception ex)
{
AddToLog(_pluginName + " - InitializePlugin error: " + ex.Message);
}
Проблема, с которой я столкнулся, заключается в том, что если метод InitializePlugin с внешней библиотекой DLL не работает, он не перехватывается с помощью try / catch в приведенном выше коде и приводит к сбою всего сервиса. Есть ли лучший способ обработки ошибок, возникающих во внешне загруженной сборке, подобной этой?