‘형식 이니셜라이저에서 예외를 throw했습니다.’ 오류 해결 방법


닷넷 프로그램을 개발할 때 프로젝트의 참조에 외부 클래스 라이브러리(DLL)를 추가해서 사용하는 경우가 많습니다.
특히나 업무용 프로그램을 개발할 경우 공통적으로 사용하는 메서드나 정의를 별도의 클래스 라이브러리로 만들어 여러 프로젝트에서 참조해서 많이 사용하게 됩니다.

여러 프로젝트에서 참조로 잘 사용되던 DLL 파일이 어느 특정 프로젝트에서만 유독 오류를 발생시키는 경우가 있습니다.
예외 발생 메시지는 아래 화면과 같습니다.

System.TypeInitializationException ‘참조 DLL’ 형식 이니셜라이저에서 예외를 throw했습니다.

System.TypeInitializationException '참조 DLL' 형식 이니셜라이저에서 예외를 throw했습니다.

‘형식 이니셜라이저에서 예외를 throw했습니다’ 오류는 여러 요인으로 발생할 수 있습니다.

이번 글에서는 여러 요인들 중에 dll 참조와 관련해서 대표적으로 자주 발생하는 요인에 대한 해결 방법을 알아보겠습니다.

InnerException 항목의 오류 원인을 찾아 해결하기

▼ 아래 화면은 예외 처리가 발생했을 때의 화면입니다.
참조에 추가한 클래스 라이브러리(DLL)의 정의 메서드를 호출하는 과정에서 오류가 발생했습니다.

‘형식 이니셜아이저에서 예외를 Throw했습니다.’ 앞에는 참조 DLL에 대한 정보만 나와 있습니다.
따라서 해당 DLL를 참조에서 삭제했다 다시 추가해 보고, 클래스 라이브러리 프로젝트를 다시 빌드한 뒤 다시 추가해 보는 작업을 반복하게 됩니다. 하지만 오류는 해결되지 않습니다.

이럴 경우 [자세히 보기]를 클릭해서 보다 정확한 오류 원인을 파악해 보아야 합니다.

System.TypeInitializationException '참조 DLL' 형식 이니셜라이저에서 예외를 throw했습니다 - 자세히 보기

▼ 아래는 [자세히 보기]를 클릭해서 들어온 화면입니다.
InnerException 항목이 보이는데 이것을 자세히 보면 “‘Oracle.DataAccess.Client.Oracle Connection’의 형식 이니셜라이저에서 예외를 Throw했습니다.”라는 내용을 확인할 수 있습니다.

앞에서 참조한 클래스 라이브러리(DLL)의 프로젝트에서 별도로 참조에 추가한 ‘Oracle.DataAccess.dll’과 관련한 추가 DLL 파일이 누락되었기 때문에 해당 오류가 계속 발생했음을 알 수 있습니다.
프로젝트의 참조에 추가하지는 않았지만 관련된 필요한 dll 파일을 찾아서 실행 파일이 생성되는 폴더에 복사해 주면 오류는 해결됩니다.

System.TypeInitializationException '참조 DLL' 형식 이니셜라이저에서 예외를 throw했습니다 - InnerException

올바른 경로의 DLL로 다시 참조 추가해서 해결하기

간혹 참조했던 dll 파일의 경로가 변경되는 경우가 있습니다. 또는 참조했던 dll 파일에 오류가 생기는 경우도 있습니다.
이를 경우 해당 클래스 라이브러리 프로젝트를 정상적으로 빌더해서 dll 파일을 새로 생성한 다음 기존 참조를 지우고 다시 참조를 추가해 주면 오류가 해결 되기도 합니다.

같은 솔루션 안에 별도의 프로젝트로 만든 클래스 라이브러리(dll) 인 경우 빌드하면 자동으로 업데이트 되어 오류가 덜 발생하지만 서로 다른 솔루션에서 타 솔루션에 있는 dll를 참조할 경우 특히 오류가 많이 발생하게 됩니다.
이때는 debug 폴더의 dll 파일을 그대로 참조하지 말고, 별도의 폴더를 만들어 복사해 놓은 다음 해당 파일을 참조에 추가해서 사용하는게 오류를 예방하는데 효과적입니다.





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기