У меня есть приложение, которое загружает плагины по требованию (использует AppDomain и MarshalByRefObject), и я пытаюсь найти другой способ проверки плагина.Найти основной класс, который наследуется от X без использования GetTypes?
Прямо сейчас, я отождествляю запуска-возможности плагинов, как это:
_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, который не может прочитать обфускации типов?
Почему вы не использовать пользовательские атрибуты для классов плагинов? – Waxoft