残念ながら、ほとんど文書化されていない既存のコードを使用していますが、ロードするプラグインのメソッドをどのように呼び出すかを理解するのに苦労しています。
現時点での私の目的は、プラグインマネージャーを介してロードされたメソッドの1つにステップインすることです。これは、例外を引き起こしているためです。ただし、デバッグシンボルを取得するには、ソースからpluginManagerを再構築する必要があり、この新しいDLLバージョンを参照すると、コンパイラがアームをスローします。
コードはプラグインをロードしてから、plug.Instance
そのような特定のメソッドにアクセスするようplug.Instance.ReturnLeaNumber();
に見えます。プラグインの詳細がわからないため、このコンパイラエラーは理にかなっています。私を混乱させるのは、プラグインが初期化されていないときに、コンパイラが実行前に有効な場所をどのように知っていたかです。古いDLLでは機能しないコードをステップスルーできます!
これは、プログラムがプラグインをロードする場所の例です。
plug = GenericServicePlugins.AvailablePlugins.Find(Application.StartupPath + "\\Dlls\\SchoolInterface.dll");
// Compiler doesn't like this next line anymore though
plug.Instance.Initialize(null, null);
再構築されたライブラリと以前に機能していたライブラリとの間に違いがある場合、バージョンがソース管理のバージョンとどのように一致するかわかりません。どこから探し始めるかについてアドバイスをいただければ幸いです。
public interface IGenericPluginMasterInterface
{
String returnName();
void Initialize(ExceptionStringResources.Translate ExceptionStrings);
Object ExecuteFunction(String macAddress, bool log, String functionName, LoginCredentials logonCredentials, WebConfiguration webConfig,
Int64 dataLinkId, DataLinkParam[] dataLinkParams, String dataName,
DataParam[] dataParams, Object[] additionalParams);
}
plug.Instance.Method()
コンパイラは、実行前にこれらのメソッドをどのように認識しますか?
編集:
私はまだこれを完全には解決していませんが、「GenericPluginServices」を部分的に反映する「PluginsService」ファイルがありませんでした。このエラーは、現在機能していないプラグインに関連するこのクラスの一部を削除したときに発生した可能性があると思います。ただし、この他のコードスニペットを投稿すると質問に役立つと思いました。