plugin機能でのMissingMethodException
- 題名: plugin機能でのMissingMethodException
- 著者: pi-ta-
- 日時: 2010/09/01 15:56:17
- ID: 27246
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: plugin機能でのMissingMethodException
- 著者: shu
- 日時: 2010/09/01 17:37:56
- ID: 27248
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: plugin機能でのMissingMethodException
- 著者: pi-ta-
- 日時: 2010/09/01 18:32:39
- ID: 27249
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: plugin機能でのMissingMethodException
- 著者: Azulean
- 日時: 2010/09/01 23:54:25
- ID: 27250
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: plugin機能でのMissingMethodException
- 著者: pi-ta-
- 日時: 2010/09/02 9:55:47
- ID: 27262
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: plugin機能でのMissingMethodException
- 著者: pi-ta-
- 日時: 2010/09/02 13:32:49
- ID: 27266
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
お世話になります。
プラグイン機能をもつアプリを作成しているのですが
Assembly.CreateInstance()でインスタンス化したプラグインクラスに
パラメータオブジェクトを渡すとMissingMethodExceptionが発生します。
Assembly.CreateInstance()ではなく、アプリ自体の参照設定に
プラグインのdllを追加し、newでインスタンス化した場合は
正常に処理が実行されます。
その部分の抜粋は以下です。
(1)の場合は、(3)の部分でMissingMethodExceptionが発生
(2)にした場合は、正常にプラグインが実行されます。
実際にMissingMethodExceptionが発生しているのは
プラグインクラスの中でPluginParameter.Connectionにアクセスした際です。
Assembly.CreateInstance()をActivator.CreateInstance()に変えても同様です。
new演算子とAssembly.CreateInstance()には、処理に差があるのでしょうか?
-------------------
//アセンブリを読み込む
Assembly asm = Assembly.LoadFrom(pi.Location);
/*** (1) ***/
//クラス名からインスタンスを作成する
IPluginHost plugin = (IPluginHost)asm.CreateInstance(pi.ClassName);
/*** (2) ***/
//IPluginHost plugin = new Exporter();
PluginParameter param = new PluginParameter(qc.Connection, SqlText, dt);
/*** (3) ***/
/*** ここでMissingMethodException ***/
plugin.Run(param);
-------------------
PluginParameterクラスの定義には
public DbConnection Connection{ get; }
のようにpublicプロパティgetで定義してあります。
MissingMethodException発生時のスタックとレースは以下です。
場所 MyPackage.Refrection.Exporter.Run(PluginParameter param)
場所 MyPackage.frmMDIMain.tsmi_Click(Object sender, EventArgs e) 場所 C:\Workspace\VisualStudio2008\Projects\App\frmMDIMain_PrivateMethod.cs:行 215
場所 System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
場所 System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
場所 System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
場所 System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
場所 System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
場所 System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
場所 System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
場所 System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
場所 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
場所 System.Windows.Forms.Control.WndProc(Message& m)
場所 System.Windows.Forms.ScrollableControl.WndProc(Message& m)
場所 System.Windows.Forms.ToolStrip.WndProc(Message& m)
場所 System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
場所 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
場所 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
場所 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
場所 System.Windows.Forms.Application.Run(Form mainForm)
場所 MyPackage.Program.Main() 場所 C:\Workspace\VisualStudio2008\Projects\App\Program.cs:行 17
場所 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
場所 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
場所 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
場所 System.Threading.ThreadHelper.ThreadStart()
使用するDLL等をリビルド、参照設定の確認は行いましたが
解決に至りませんでした。
何か方法があれば助言ください。
よろしくお願いいたします。