.NET MissingMethodexception 수천 개의 최종 사용자 머신 중 하나에서 발생합니다. 통찰력이 있습니까?
-
11-09-2019 - |
문제
이 문제는 당황스럽고 단일 사용자에게 영향을 미치고 (내 지식으로) 우리에 의해 재현되지 않았습니다 ...
사용자는 누락 된 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 유형 분해 영역에서 창의 하나의 특정 풍미에서 이상한 동작으로 추적했습니다.