У меня есть приложение, которое загружает плагины по запросу (использует AppDomain и MarshalByRefObject), и я пытаюсь найти другой способ проверки плагина.
Прямо сейчас я идентифицирую работающие плагины следующим образом:
_pluginAassembly = AppDomain.CurrentDomain.Load(assemblyName);
foreach (var type in _pluginAassembly.GetTypes().Where(type => type.GetInterface("IPluginChat") != null || type.GetInterface("IPlugin") != null))
{
_instance = Activator.CreateInstance(type, null, null);
return ((IPlugin)_instance).Check();
}
Однако, если один из плагинов запутан, GetTypes мгновенно выйдет из строя:
Could not load type 'Invalid_Token.0x01003FFF' from assembly 'SimplePlugin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
Следовательно, этот метод не позволит мне запускать как обфусцированные, так и необфусцированные плагины.
Я понимаю, что мне потребуются плагины, чтобы импортированные методы интерфейса и основной класс не были запутаны, чтобы это работало.
Короче говоря, есть ли способ найти мой основной класс, который наследуется от одного из двух упомянутых интерфейсов (IPlugin или IPluginChat), без необходимости использовать GetTypes, который не может прочитать запутанные типы?