2013年1月19日土曜日

プラグイン実装時にデシリアライズがうまくいかない!!

アセンブリ'Sample,Version=1.0.0.0, Culture=neutral, PublicKeyToken = null"が見つかりません


上記はC#でプラグインを実装しようとしていた際に出くわした例外です。
プラグイン自体はアプリケーションフォルダ内の[plugin]フォルダに格納されています。

そして、そのプラグインはBinaryFormatterを使用してファイルの読み書きを行う機能を持っていますが、Deserializeメソッドを呼ぶときに上記例外でこけてしまいます。

どうやら[Sample.dll]がうまくロードされないらしいんです。
ちゃんとpluginフォルダにあってSerializeメソッドはこけないのに・・・

で、調べてみるとデシリアライズが行われる前に

というイベントを登録しなければならないそうです。
で、CurrentDomain_AssemblyResolveメソッドは以下のようにしました。 メソッドの定義、イベントの登録を行えば問題なくできました。

プラグイン機能を持つアプリケーションを作成する
このページのPluginInfoクラスのコンストラクタにイベント登録、適当な個所にCurrentDomain_AssemblyResolveメソッドを書き足しました。

これで今の所問題ないようです。
何か突っ込みありましたらお待ちしてます。