Window XP 32bits 개발 환경에서 컴파일한 .NET 응용 프로그램을 64bits Vista 가 설치된 컴퓨터에서 실행하니 프로그램이 설치된 디렉토리에 해당 DLL이 존재하지만 해당 DLL을 찾을 수 없어 프로그램이 종료되는 문제가 발생하였다. (파일이나 어셈블리 중 하나를 로드할 수 없습니다.)
프로그램 구조는 .NET 3.5 에서 돌아가는 WPF 기반의 응용 프로그램에 통신 모듈은 C++/CLI DLL 라이브러리를 사용하는 프로그램 이었다. 이 C++/CLI DLL 라이브러리는 또한 Native로 된 C++ DLL 라이브러리를 사용하고 있었다.
보통 32bits OS에서 위 에러는 해당 CLISocketLib.dll에서 C++ Runtime Library를 사용하는데 해당 버전의 Runtime 라이브러리가 설치되지 않았을 경우 발생했다. 따라서, Runitme Library만 설치해주면 해결되었던 문제 인데, 이번에는 x64용 과 x86용 Runtime Library를 설치하였음에도 불구하고 계속 위 문제가 발생하였다.
결론은 메인 응용 프로그램인 WPF 응용 프로그램은 64bits 모드에서 동작하는데 반해, C++/CLI DLL은 32bits 모드에서 동작하도록 컴파일 되었기 때문이었다.
따라서 결국 최선의 해결책으로 WPF 응용 프로그램이 32bits 호환 모드에서 동작하도록 강제하여 컴파일 하여 배포함으로서 문제를 해결하였다.