Правильная обработка ошибок с помощью службы Windows, которая загружает внешнюю сборку / DLL - PullRequest
2 голосов
/ 20 декабря 2010

У меня есть служба 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 в приведенном выше коде и приводит к сбою всего сервиса. Есть ли лучший способ обработки ошибок, возникающих во внешне загруженной сборке, подобной этой?

1 Ответ

1 голос
/ 20 декабря 2010

просто используйте блок catch без исключения. Не все исключения имеют тип.

try
{

}
catch(Exception ex)
{

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