2012-02-09 6 views
3

공용 클래스에 정적 메서드가 있습니다. 예 :클래스에서 정적 메서드를 호출 할 때 TypeInitializationException이 발생하는 이유는 무엇입니까?

public class MyClass { 
public static bool Test() { return true; } 
} 

그리고 다른 클래스의 단위 테스트에서이 전화 : 디버거이에 관해서는 발생

MyClass.Test(); 

: TypeInitializationException :

{ "형식 이니셜을 'Xxxxx.Yyyyy.MyClass'에 예외가 발생했습니다. "}

Inn 어 예외는 말한다 :

가 { "값은 null 일 수 없습니다 \ 연구 \ 이름 nParameter :. 용기"}

는 경우가 있습니다 이유는 어떤 생각?

참고 : 이것은 콘솔 응용 프로그램의 클래스입니다 (중요한 경우).

+2

봐 -와 내부 예외를 포함하여 전체 TypeInitializationException을 게시하시기 바랍니다. –

+0

나는 질문을 편집했다 ... – pencilCake

+1

그것은 완전한 예외는 아니며 단지 메시지 일 뿐이다. 전체 * 예외, 스택 추적 및 모두 게시 할 수 있습니까? 그걸 꽤 분명하게해야합니다. –

답변

8

유형 (유형 인스턴스가 아닌)의 초기화 중에 예외가 발생하면 TypeInitializationException이 발생합니다.

이것은 일반적으로 정적 생성자에서 예외가 발생하거나 정적 필드가 초기화되는 것을 의미합니다.

원인을 찾으려고 할 때 한 가지 중요한 점은 다음과 같습니다. 한 번 유형에서이 예외를 던지면 항상이 유형을 액세스하려고 시도 할 때마다 던져 버릴 것입니다. 즉, 바닥에 닿으면 이후에 던져지는 곳이 아니라 처음 던져지는 곳을 사냥해야 할 수 있습니다.

[수정 된 질문에 대한 답변] MyClass을 더 게시 할 수 있습니까? 이것은 타입 자체가 초기화 될 때 무언가를하고 있습니다.

+0

O.K. 이것은 IoC 컨테이너와 관련이있는 것 같습니다. 나는 당신의 조언에 따라 "예외가 발생하면 휴식 : 공용 언어 런타임 예외"를 설정하고 IoC에 대한 설정 문제가 있음을 발견했습니다. 조언 해 주셔서 감사드립니다. – pencilCake

0

dodgy 빌드에서 얻은 과거의 ive에서 솔루션을 정리하고 다시 빌드 해보십시오. 또한 구성 관리자가 빌드 구성이 올바른지 확인하십시오

+0

빌드 구성을 확인해야하는 "특정"문제는 무엇입니까? – pencilCake

+0

당신의 현재 빌드와 다르게 보일 것, 예를 들어 디버그 x86을 사용한다면 (즉, 콘솔 어플리케이션을 위해) 디버그를 사용하는 어떤 프로젝트도 없다면 –

1

어쩌면 이것은 당신을 도울 것입니다 : similar question

보통 TypeInitializationExceptionInnerException를 통해 볼 수있는 실제 예외를 숨 깁니다. 이것이 도움이되지 않으면 예외를 잡을 수있는 더 나은 제어 기능이있는 singleton을 만드는 것에 대해 생각해보십시오.

0

이 문제도 내 문제를 해결하는 데 시간이 걸렸습니다. 나는 두 개의 동일한 정의가 포함 된 정적 메서드에서 사전을 사용하고 있다는 것을 깨달았습니다. 따라서 오류가 발생했습니다. 그러나이 내부 예외는 TypeInitializationException에 의해 처리됩니다. 실제 메서드를보고 코드에 오류가 있는지 확인하려고합니다.감사합니다,

private static Dictionary<string, string> _dictionaryTest = new Dictionary<string, string>() { 
    {"zzz", "zzzz"}, 
    {"zzz", "zzzz"}, 

} 정적 생성자와 정적 변수 초기화에

관련 문제