DllNotFoundException: DLL 'SQLite.Interop.dll'

  프로젝트 빌드 중 DllNotFoundException: DLL 'SQLite.Interop.dll' 에러가 발생해 해결 방법을 찾아보니, SQLite.Interop.dll을 배포시 첨부하라는 답변을 얻었습니다.

  문제는, 이렇게 할 경우 AnyCPU 구성을 사용하기 불편해집니다.

  방법이 없나 찾다가 패키지 폴더 구조를 봤더니 다음과 같이 되어 있었습니다.

1. SQLite.Interop.dll 상위 디렉토리

  각 플랫폼 폴더 안에 SQLite.Interop.dll이 들어가 있는 식이죠.

  지금까지는 파워쉘 스크립트를 작성해 빌드 후 이벤트에서 호출하고, 플랫폼에 맞는 DLL을 복사하는 방식으로 진행하고 있었는데, 혹시나 하여 그냥 저 폴더 자체를 갖다가 넣어보니 구성을 x86이나 x64로 지정하지 않고 AnyCPU로 두어도 잘 작동하더군요.


프로젝트에 포함된 SQLite.Interop.dll


출력 디렉토리에 복사를 사용해 자동 복사 (폴더 구조까지)

출력 디렉토리에 복사된 모습

  이대로 실행하면 AnyCPU 구성에서도 정상적으로 로드하는 것을 확인할 수 있었습니다.

  어찌 된 일인가 찾아보니, 스택 오버플로우에 잘 정리된 글이 있었습니다. SQLite가 알아서 현재 플랫폼에 맞는 바이너리를 x86, x64 폴더 중에서 선택해 로드한다고 합니다.

댓글

이 블로그의 인기 게시물

C# 남아도는 메모리에도 불구하고 OutOfMemoryException이 발생한다면?

USB를 뒤는 괜찮은데 앞에 꽂으면 인식이 힘들다?

MySQL 데이터 타입과 Java 데이터 타입 비교/매칭