2009-08-24 4 views
1

나는 Microsoft.Practices.EnterpriseLibrary.Common.dll를 참조하는 DLL 프로젝트를 가지고 (= "dll을")를 Microsoft 엔터프라이즈 라이브러리 3.1 내 설치 디렉토리에서. 그것은 "b03f"로 시작하는 공개 키를 가지고 있습니다.
Miner.Geodatabase.dll 버전 9.30.2.5168 (GAC 폴더에 9.2.0.0이 표시됨)을 참조하는 다른 프로젝트가 있습니다. 마이너 dll에는 "196b"로 시작하는 공개 키가 있습니다.
세 번째 dll은 다른 두 개를 참조합니다.이상한 DLL 동작 (질문 점검)

가 여기에 위의 프로젝트 ELTest.rar 간단한 VS2005 솔루션입니다 -
1 RefEL, 단지 그것의 lib 폴더에서 dll을를 참조합니다.
2. RefGeodatabse는 GAC에서 Miner.Geodatabase.dll을 참조합니다.
3. RefBoth는 다른 두 프로젝트를 참조합니다. RefGeodatabase 및 RefBoth의 bin/디버그 dll을의 버전을 포함하면서

컴파일 후, RefEL의 bin/debug 폴더는 "b03f"("진짜") dll을의 버전이 포함되어 있습니다 마이너 dll과 같은 "196b"로 시작하는 공개 키. 그들은 엔터프라이즈 라이브러리를 다시 컴파일 한 것으로 보인다.
런타임에서 (내 진짜 솔루션,이 가짜 솔루션이 아닙니다) 내 "두"프로젝트 "EL"프로젝트를 호출합니다 "b03f"dll 필요한, 찾을 수없는 및 충돌합니다.

내가해야 할 일은 무엇입니까? 엔터프라이즈 라이브러리 dll을 GAC에 등록하면 런타임에 찾을 수 있습니다. 대상 컴퓨터에 entlib를 설치하지 않아도되는 다른 솔루션이 있습니까?

+0

사용중인 Visual Studio의 버전은 무엇입니까? 프로젝트 참조 또는 파일 참조를 사용하고 있습니까? HintPath는 프로젝트 파일에서 어떤 모습입니까? 설명하는대로 DLL을 복사하는 것은 완전히 정상입니다. –

+0

vs2005 sp1을 사용 중입니다 (sp가 설치되어 있지 않은 경우에도 발생합니다). 프로젝트 A는 EL dll을 파일 (lib 폴더 내부)로 참조하고 ** GAC로부터 ** 아닙니다. 프로젝트 B가 GAC를 통해 Miner.Geodatabase.dll (버전 9.30.2.5168)을 참조하고 컴파일 한 후에 이상한 EL dll을 수신합니다. 이 DLL이 어디서 왔는지 이해할 수 없습니다. 그러나 A와 B를 모두 참조하는 프로젝트는이 이상한 DLL을 얻고 A는 런타임에 실패합니다. –

답변

0

글쎄, 내 GAC (및 프로덕션 컴퓨터)에 엔터프라이즈 라이브러리의 일반 ("b03f") 버전을 등록하기로 결정했습니다. 나는 this 링크를 사용하여 모든 dll을 한 번에 등록했습니다. 매력처럼 일했다.

이제 내 RefEL 프로젝트는 DLL의 GAC 버전을 참조하고, RefGeodatabase 런타임 내 프로젝트에서 copylocal의로 = true를 GAC에서 "196b"버전을 참조 Miner.Geodatabase.dll을 가지고에도 불구하고 GAC에서 "b03f"버전을 발견하고 충돌하지 않습니다.