0

这个问题让我感到困惑,它影响到单个用户(据我所知)并且我们没有复制......

  • 用户正在接收 MissingMethodException,我们的跟踪文件表明它发生在我们创建组件的新实例之后,当我们调用 Initialize/Setup 方法准备让它工作时(示例中为 InitializeWorkerByArgument)

  • 错误指定的Method是接口方法,基类实现,基类派生的类可以根据需要重写

  • 用户拥有我们应用程序的最新版本

  • 所有提供的代码都在一个程序集中发货

这是该组件的一个非常精炼的版本:

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);
    }
}
4

4 回答 4

6

听起来您正在使用一种方法,该方法是在 .NET Framework 2.0 的 SP 中发布的。

我遇到了与使用ManualResetEvent的方法WaitOne(int)相同的问题。我不得不用WaitOne(int,bool)替换它。

在 .NET Framework SP 2 中添加了WaitOne(int)方法,在安装 .NET Framework 3.5 SP1 时应用该方法。

在这种情况下,我建议阅读 MSDN。“版本信息”告诉您在哪个框架或服务包中支持特定方法。

于 2009-07-08T11:54:20.913 回答
1

有没有可能这是一个 .NET Framework 依赖问题并且该用户没有所需的 .NET 版本?只是一个想法。

于 2009-07-08T11:40:12.860 回答
1

鉴于问题的罕见性,这似乎是该用户计算机上的软件环境损坏的结果。

于 2009-07-08T11:41:25.977 回答
1

问题机器上的操作系统是否与所有其他机器不同?几年前我调试了一个类似的错误,我认为我将其追溯到 .Net 类型解析领域的一种特定类型的 Windows 上的奇怪行为。

于 2009-07-08T15:36:45.263 回答