이 문제에 대한 조사를 해본 결과 몇 가지 가능한 해결책이 있지만 나에게 도움이되지는 못했습니다.SQLite DLL을 WPF 응용 프로그램에서로드하지 못했습니다.
파일 또는 어셈블리 'System.Data.SQLite.dll'또는 해당 종속성 중 하나를로드 할 수 없습니다. 지정한 모듈을 찾을 수 없습니다.
SQLite를 사용하는 WPF 응용 프로그램이 있습니다. 내 개발 컴퓨터 (Windows 7, 64 비트, Visual Studio 2010)에서는 모든 것이 잘 작동합니다. QA 부서에서 모든 것이 정상적으로 작동합니다. 그러나 고객 서비스 (32 비트)의 빌드 머신 (Windows Server 2008, 64 비트) 이상에서는 오류가 발생합니다.
내 .sln은 두 개의 .exe 프로젝트와 두 개의 .exe 프로젝트 (SQLite 로직 포함)로 구성된 3 개의 프로젝트로 구성됩니다. 모두 3 개가 Debug 및 Release의 두 가지 구성을 가지고 있으며 각 버전은 x86으로 컴파일됩니다. SQLite dll이 실행 디렉토리에 있습니다.
내 GAC에 3 개의 System.Data.SQLite 항목이 있습니다.이 항목은 내 컴퓨터에서 성공했지만 다른 특정 항목이 아닌 이유로 확인 되었기 때문에 발견 된 DLL을 사용하지 않는 이유는 알 수 없습니다 실행중인 디렉토리에서. 모든 GAC 항목은 버전 1.0.66.0이고 공개 키 토큰은 같으며 MSIL, x86 및 AMD64와 각각 연관됩니다. GAC에서 파일을 제거하면 프로젝트 참조가 "로컬 복사"로 변경 될 때까지 오류를 재현 할 수있었습니다.이 시점에서 내 컴퓨터에서 다시 작동했습니다 (여전히 다른 컴퓨터에서는 작동하지 않음).
이것이 얼마나 똑똑한 지 잘 모르겠지만 (프로젝트에서 참조를 사용하면서) dll의 동적로드를 시도하고 32 비트 또는 64 비트 환경에서 실행 중인지 확인하고 Assembly.LoadFrom 올바른 비트에 대한 SQLite DLL을로드합니다. 이 코드는 성공적으로 실행되고 내 64 비트 컴퓨터에서 32 비트 버전으로 이동합니다. 이는 x86 컴파일 플랫폼 때문이라고 생각합니다. 그럼에도 불구하고 다른 컴퓨터에서 볼 수있는 오류는 변경되지 않았습니다.
이 문제를 해결하는 방법에 대한 제안 사항은 무엇입니까?
편집 : 나는 과거에 같은 문제를했다 GAC
누락 된 것을 찾기 위해 [DependencyWalker] (http://www.dependencywalker.com/)와 같은 것을 사용해 보셨습니까? – climbage
그래 의존성 워커와 퓨전 뷰어는 이것을 디버깅하는 것이 좋습니다. – AbdElRaheim
필자는 Dependency Walker를 가끔 사용했지만 필자가 자신의 기술에 익숙하다고 말하기에는 충분하지 않습니다. Dependency Walker에서 내 .exe (그리고 그 이후, SQLite로 대부분의 작업을 수행하는 dll - 같은 결과)를로드하고 그 아래에 나타나는 유일한 것은 MSCOREE.DLL입니다. 확실하게 나는 여기서 무엇을보아야하는지 오해하지만, 내 파일이 의존하는 .dll을 보지 말아야합니까? SQLite dll을 참조하지 않고도 컴파일 할 수 없습니다. – REW