这个问题已经困惑了我,它的影响单个用户(据我所知)并没有被我们再现....NET MissingMethodException发生在数千个最终用户机器中的任何一台机器上 - 有什么见解?
用户正在接收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);
}
}
我倾向于同意,但最终用户自然是一个非常讨厌的人来处理 - 所以我尽我所能进行尽职调查之前假设它是针对他们的一个工作站的 – STW 2009-07-08 11:43:53
它总是这样,它必须有一个“法律”的名称,你一定在做正确的事情,缩小问题的范围,然后你从事实不是这个假设对于某个人来说总是很难辩驳,有可能是这个用户拥有*完成*而不是一个随机问题。 – Lazarus 2009-07-08 11:54:25