プラグインをオンデマンドでロードする (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();
}
ただし、プラグインの 1 つが難読化されている場合、GetTypes は即座に失敗します。
Could not load type 'Invalid_Token.0x01003FFF' from assembly 'SimplePlugin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
したがって、この方法では、難読化されたプラグインと難読化されていないプラグインの両方を実行することはできません。
これが機能するためには、プラグインがインターフェースのインポートされたメソッドとメインクラスを難読化しないようにする必要があることを理解しています。
つまり、難読化された型の読み取りに失敗する GetTypes を使用せずに、前述の 2 つのインターフェイス (IPlugin または IPluginChat) のいずれかを継承するメイン クラスを見つける方法はありますか?