닷넷 프로그램을 개발할 때 다양한 라이브러리를 참조해서 사용하는 경우가 많습니다.
좀 더 뛰어난 UI를 구현하거나 특별한 기능을 구현하기 위해 별도의 참조 라이브러리(DLL)를 함께 추가해서 사용하게 됩니다.
이렇게 추가로 참조한 라이브러리를 개발 단계에서는 아무런 문제가 없다가 막상 사용자에게 배포해서 사용하는 시점에 얘기치 못한 오류가 발생하는 경우가 있습니다.
오류 내용 : System.BadImageFormatException: 프로그램을 잘못된 형식으로 로드하려고 했습니다. (예외가 발생한 HRESULT: 0x8007000B)
이러한 오류가 발생하는 원인은 32비트로 빌드해서 만들어진 참조 라이브러리를 64비트 시스템에서 실행하려고 할 때 발생하게 됩니다. 반대로 64비트로 빌드 된 참조 라이브러리를 32비트 시스템에서 실행했을 때도 동일한 오류가 발생합니다.
따라서 이러한 오류를 해결하기 위해서는 빌드할 때 플랫폼 대상을 참조하는 라이브러리의 플랫폼 대상에 맞추어 다시 빌드해서 실행 파일을 만들면 됩니다.
이번 글에서는 C# 32Bit 참조 라이브러리를 64Bit 시스템에서 빌드해서 사용 하는 방법에 대해 알아보겠습니다.
참고로 64Bit 참조 라이브러리를 32Bit 시스템에서 사용하기 위해 대상 플랫폼을 x86으로 빌드해서 사용할 수는 없습니다.
64비트 시스템은 x86 또는 x64 플랫폼으로 빌드 한 프로그램을 모두 사용할 수 있지만 32비트 시스템은 x86 플랫폼으로 빌드 한 프로그램만 실행이 가능합니다.
32Bit 참조 라이브러리를 64Bit 시스템에서 빌드해서 사용 하는 방법
일반적으로 비주얼스튜디오의 빌드에서 플랫폼 대상은 Any CPU로 되어 있습니다.
플랫폼 대상을 Any CPU로 되어있는 상태에서 빌드 한 경우 해당 프로그램은 실행하는 시스템의 기본 플랫폼으로 실행됩니다. 따라서 64bit 시스템에서 해당 프로그램을 실행할 경우 64비트 환경으로 실행이 되며 이때 만약 32bit 라이브러리를 참조하여 빌드 한 경우라면 서로 플랫폼이 맞지 않아 앞에서 언급한 에러가 발생하게 되는 것입니다.
반면에 동일한 실행 파일을 32bit 시스템에서 실행한 경우 에러 없이 정상적으로 실행이 됩니다.
만약 참조 라이브러리의 플랫폼이 x86(32비트)으로 빌드 된 라이브러리라면 비주얼스튜디오에서 빌드하는 과정에 플랫폼을 x86으로 지정해서 빌드를 하게 되면 위와 같은 오류는 더 이상 발생하지 않습니다.
마무리
64비트 시스템은 x86(32비트)이나 x64(64비트) 플랫폼으로 빌드 된 실행 파일을 모두 실행해서 사용할 수 있습니다.
만약 해당 프로그램을 실행해서 사용하는 환경이 어떤 플랫폼인지 정확하게 구분이 되지 않는다면 x86(32비트) 플랫폼으로 빌드 해서 배포하는 것이 오류를 예방하는데 더 효과적입니다.
※ 함께 읽으면 도움이 될 만한 다른 포스팅 글입니다.
이 글이 도움이 되었기를 바랍니다. ^-^