.NET MissingMethodexception 수천 개의 최종 사용자 머신 중 하나에서 발생합니다. 통찰력이 있습니까?

StackOverflow https://stackoverflow.com/questions/1097519

문제

이 문제는 당황스럽고 단일 사용자에게 영향을 미치고 (내 지식으로) 우리에 의해 재현되지 않았습니다 ...

  • 사용자는 누락 된 methodexception을 수신하고 있으며, 추적 파일은 컴포넌트의 새 인스턴스를 작성한 후에 발생하고 있음을 나타냅니다. 초기화/설정 메소드를 호출하여 작동하도록 준비 할 때 (ENITIALIZERWERBYARGUMENT).

  • 오류로 지정된 방법은 기본 클래스가 구현되고 기본 클래스에서 파생 된 클래스가 필요한 인터페이스 메소드입니다.

  • 사용자는 최신 응용 프로그램 릴리스를 가지고 있습니다

  • 제공된 모든 코드는 단일 어셈블리 내에서 배송됩니다.

다음은 매우 증류 된 구성 요소입니다.

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);
    }
}
도움이 되었습니까?

해결책

문제의 희귀 성을 감안할 때, 이것은 한 사용자의 컴퓨터에서 소프트웨어 환경이 깨진 결과 인 것 같습니다.

다른 팁

.NET Framework 2.0의 SP에서 해제 된 메소드를 사용하는 것처럼 들립니다.

방법을 사용한 것과 같은 문제가있었습니다. Waitone (int)ManualResetevent. 나는 그것을 교체해야했다 Waitone (int, bool).

방법 Waitone (int) .NET Framework 3.5 SP1을 설치할 때 적용되는 .NET Framework SP 2에 추가되었습니다.

이 경우 MSDN을 읽는 것이 좋습니다. "버전 정보"는 특정 방법이 지원되는 프레임 워크 또는 서비스 팩을 알려줍니다.

이 기회는 .NET 프레임 워크 종속성 문제 이며이 사용자는 필요한 .NET 버전이 없습니까? 그냥 생각.

문제 기계의 OS가 다른 모든 것과 다른가요? 나는 몇 년 전에 비슷한 오류를 디버깅했고 나는 생각한다 .NET 유형 분해 영역에서 창의 하나의 특정 풍미에서 이상한 동작으로 추적했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top