Oracle 클라이언트 라이브러리를 로드하려는 시도에서 BadImageFormatException을 Throw했습니다. 32비트 Oracle 클라이언트 구성 요소가 설치된 상태에서 64비트 모드로 실행할 경우 이러한 문제가 발생..

2014. 7. 30. 21:37Coders

System.Data.OracleClient.dll 을 참조하여 Visual Studio 디버깅 중, Connection Open 시점에 다음과 같은 System.InvalidOperationException 오류를 만났을 때.


Oracle 클라이언트 라이브러리를 로드하려는 시도에서 BadImageFormatException을 Throw했습니다. 32비트 Oracle 클라이언트 구성 요소가 설치된 상태에서 64비트 모드로 실행할 경우 이러한 문제가 발생합니다.


영문? : Attempt to load oracle client libraries threw BadImageFormatException. This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed.


저 처럼 좀 늙은 개발자들은 한숨을 푸악.

이런 메시지를, 특수한 환경에서 맞이하게 됩니다.

그 특수한 환경인 제 환경은, 윈도7 64비트, VS2012(또는 VS2010) 입니다. 글 맨 앞 머리에서 Visual Studio 디버깅 중 을 강조한 이유는, 오라클 개발자 다운로드 사이트에 들어가면 답이 나옵니다.


먼저 오라클 홈페이지로 들어가셔서, Downloads, Developer Tools, Developer Tools for Visual Studio 로 들어가면, 이 글을 작성하는 현 시점에서 다음과 같은 화면이 나옵니다.



사실상, 이 글을 작성하는 이유인, 저 오류 메시지를 받게 되는 경우, 화면상의 64-bit ODAC Downloads 링크를 통해 64비트 ODAC을 설치한 분일 겁니다. 그런데, 그 링크를 들어가 보면요.


상단에 이런 문구가 적혀 있습니다. 중요하다네요.

Important: The 32-bit Oracle Developer Tools for Visual Studio download is required for Entity 

Framework design-time features. The downloads that support Entity Framework deployment below do not contain design-time tools, only run-time support.


토익 400점대인 제가 대충 읽으면, 개발(Design) 시점에는 32비트 개발 툴이 필요하다. 이 다운로드는 개발 시점의 툴이 안 깔려 있고, 오직 (배포된 어플리케이션의)실행 시점만 지원한다. 라고 나옵니다.


네, 이게 답이에요. "뒤로" 살포시 가서, 32-bit ODAC with Oracle Developer Tools for Visual Studio Downloads 얘를 클릭해서, 받아서 설치하면, 제목의 저 오류는 만나지 않습니다.


뭘까요?

만약 64비트 환경이라고 해도, 그냥 빌드하고 배포하면, 만약 실행되는 머신에 해당 플랫폼에 맞는 오라클 클라이언트가 설치되어 있으면, 제대로 돌아간다는 얘깁니다. 즉, VS2010, VS2012에서 디버깅할 때에만 저 오류 메시지를 만나게 될 거라는 거죠.


상용으로, 또는 중요한 작업을 위해 개발하는 어플리케이션인데, 디버깅 없이 배포하진 않겠죠.

저와같은 초짜 닷넷+오라클 개발자 분들은 해당 내용을 명심하시어 개발 시에는 내 PC는 64비트이니 64비트 ODAC만 깔면 되겠지 왜 안돼? 하는 생각하지 마시고, 32비트 ODAC도 설치하시길 바래요.


저와 같은 실수하지 않길 바라며 글을 맺습니다.


'Coders' 카테고리의 다른 글

[C#] DataGridView RowSelector Numbering  (0) 2014.08.06
Text File Line Counter  (1) 2014.06.27
[C#] Class 의 string 프로퍼티 값의 NULL 문자열 제거  (0) 2014.06.20