2011-08-08 3 views
1

내 컴퓨터에 이상한 증상이 나타 났을 때 질문이 도착했습니다.Main() 앞에 오는 것은 어떻게됩니까?

다음과 같은 현상이 있습니다. WinForms 응용 프로그램이 C# (.Net 2.0)로 작성되었습니다. Visual Studio 2005 (Debug 또는 Release)에서 실행하면 모든 것이 잘됩니다. Windows에서 실행하려고하면 (정확히 VS 2005에서 디버그 프로세스에 의해 생성 된 동일한 실행 파일을 실행하면) "System.TypeInitializationException"이 Program 클래스에 있습니다.

정적 생성자와 Main()에 디버그 로그 메시지 (File.AppentAllText())를 추가했습니다. 정적 생성자의 로그 메시지는 작성되지만 Main()의 로그 메시지는 작성되지 않습니다. 따라서 정적 생성자가 끝나고 Main()에 대한 호출이 실행되기 전에 무언가가 발생합니다.

다음에 어디를보아야할까요? Main() 메서드가 호출되기 전에 어떤 일이 발생합니까?

감사합니다.

편집 : 응용 프로그램이 다른 컴퓨터에서도 정상적으로 실행되어야한다고 생각합니다. :)

+0

전체 예외를 제공 할 수 있습니까? – Jay

+0

System.TypeInitializationException 처리되지 않았습니다. 메시지 : ' .Program'의 형식 초기화 프로그램에서 예외가 발생했습니다. (네임 스페이스가 제거되었습니다 ....) –

+0

죄송합니다. [TypeInitializationException] (http://msdn.microsoft.com/en-us/library/system.typeinitializationexception.aspx)는 단순히 래퍼입니다. 내부 예외에는 모든 장점이 있습니다. 적어도 내부 예외에서 메시지를 게시 할 수 있습니까? – Jay

답변

1

예외에 따라 정적 생성자 또는 정적 필드의 초기화와 같이 여기에 처리되지 않은 예외가 발생하는 것 같습니다. Main 메서드가 분명히 실행되고 있지 않다는 것을 감안하면 Main 메서드에서 참조되어 CLR에 의해 초기화되는 형식의 경우에 발생할 가능성이 높습니다.

이 문제의 원인을 추적하는 데는 몇 가지 방법이 있습니다. 그들 중 누구도

  • 프로그램의 Main 메서드를 검사하고 놀이의 모든 유형을 분석하고 체계적으로 발견 Main 메서드에 줄을 주석
  • 을 던지는 할 수있는보고 자신의 정적 생성자를 분석 꽤 있습니다없는 하나는 예외의 원인입니다.

또는 프로그램을 실행하면 오류 대화 상자가 나타납니다. 이 시점에서 프로세스에 연결하고 예외를 조사하여 문제의 원인이되는 유형을 확인합니다.

+0

Main 메서드의 첫 번째 줄은 디버그 메시지가있는 File.AppentAllText()입니다. 로그 파일에 기록되지 않습니다. :(또한, 디버거로 연결하려고하면 "Debugger :: HandleIPCEvent, EventId = 0x201, Exception code = 0xe06d7363, Eip = 0x7c812afb"라는 오류가 발생합니다. –

2

정적 생성자에서 코드를 확인하십시오. TypeInitializationException은 일반적으로 정적 생성자에 예외가있을 때 발생하므로 형식을 초기화 할 수 없습니다. 다른 보안 권한을 가진 다른 사용자로부터 코드가 시작 되었기 때문에 코드가 IDE에서 정상적으로 작동 할 수 있습니다. 부수적 인 점은 가능한 경우 정적 생성자를 사용하지 않는 것입니다.

+1

질문 : 왜 정적 생성자를 피해야합니까? VS에서 실행하고 사용자 및 보안 권한이있는 한 Windows에서 실행하는 것의 차이점은 무엇입니까? –

0

* .config 파일에 오류가있을 경우 System.TypeInitializationException도 표시됩니다. 이 경우 LineNumber에 대한 innerException을 확인하십시오.

+0

내부 예외가 표시되지 않는 문제가 있습니다 .. –

+0

@ Constantin에서 디버그 모드로 앱을 시작하면 시작 팝업 창이 예외 (blabla)와 함께 열어야한다 "세부 정보 얻기 ...". – Skomski

+0

VS 2005 (디버그 또는 릴리스)에서 응용 프로그램을 시작할 때 오류가 발생하지 않습니다. 응용 프로그램이 정상적으로 실행됩니다. 내가 가지고있는 문제 : VS에서 Windows에서 OK를 실행하면 오류가 발생합니다. –

관련 문제