我有一个按需加载插件的应用程序(使用 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'.
因此,这种方法不允许我同时运行混淆和非混淆插件。
我知道我会要求插件具有接口导入的方法和主类不被混淆才能工作。
简而言之,有没有办法找到我的主类,它继承自提到的 2 个接口(IPlugin 或 IPluginChat)之一,而不必使用无法读取混淆类型的 GetTypes?