この問題は私を困惑させました.1人のユーザーに影響を与えており(私の知る限り)、再現されていません...
ユーザーが MissingMethodException を受け取っています。トレース ファイルは、コンポーネントの新しいインスタンスを作成した後、それを機能させる準備として Initialize/Setup メソッドを呼び出しているときに発生していることを示しています (例では InitializeWorkerByArgument)。
エラーによって指定されたメソッドは、基本クラスが実装するインターフェイス メソッドであり、基本クラスから派生したクラスは必要に応じてオーバーライドできます。
ユーザーはアプリケーションの最新リリースを持っています
提供されるすべてのコードは、単一のアセンブリ内で出荷されます
コンポーネントの非常に単純化されたバージョンを次に示します。
class Widget : UserControl
{
public void DoSomething(string argument)
{
InitializeWorkerByArgument(argument);
this.Worker.DoWork();
}
private void InitializeWorkerByArgument(string argument)
{
switch (argument)
{
case "SomeArgument":
this.Worker = new SomeWidgetWorker();
break;
}
// The issue I'm tracking down would have occured during "new SomeWidgetWorker()"
// and would have resulted in a missing method exception stating that
// method "DoWork" could not be found.
this.Worker.DoWorkComplete += new EventHandler(Worker_DoWorkComplete);
}
private IWidgetWorker Worker
{
get;
set;
}
void Worker_DoWorkComplete(object sender, EventArgs e)
{
MessageBox.Show("All done");
}
}
interface IWidgetWorker
{
void DoWork();
event EventHandler DoWorkComplete;
}
abstract class BaseWorker : IWidgetWorker
{
virtual public void DoWork()
{
System.Threading.Thread.Sleep(1000);
RaiseDoWorkComplete(this, null);
}
internal void RaiseDoWorkComplete(object sender, EventArgs e)
{
if (DoWorkComplete != null)
{
DoWorkComplete(this, null);
}
}
public event EventHandler DoWorkComplete;
}
class SomeWidgetWorker : BaseWorker
{
public override void DoWork()
{
System.Threading.Thread.Sleep(2000);
RaiseDoWorkComplete(this, null);
}
}