2009-10-22 4 views
16

3 가지 프로젝트 (GUI, BL 및 DAL)가있는 솔루션이 있습니다. DAL 어셈블리는 GAC에 서명되고 배포됩니다..NET 어셈블리 로딩 우선 순위

솔루션을 빌드하면 DAL이 컴파일되고 어셈블리가 주 프로젝트의 bin 폴더에 배치됩니다. 그러나 응용 프로그램을 실행할 때 로컬 응용 프로그램 대신 GAC 버전을로드합니다. 왜 이런거야?

GAC의 버전이 최신 버전이 아니며 일부 메소드가 누락 되었기 때문에 실현되었지만 잘 컴파일되었지만 실현되었습니다.

GAC가 로컬 bin 폴더보다 우선 순위가 높습니까?

사전에

답변

19

짧은 대답 인 경우 GAC는 로컬 파일보다 우선합니다.
이것은 네이티브 dll 환경에서 사용 된 것과는 다른 동작입니다 (SYSTEM32에서 항상로드되는 일부 시스템 DLL 제외).

왜?
어셈블리에 버그가있는 동일한 어셈블리의 여러 응용 프로그램이 있다고 가정하면 모든 응용 프로그램을 어떻게 수정합니까? 모든 드라이버에서 모든 응용 프로그램을 검색하기가 어려우므로 단일 어셈블리를 GAC에 쉽게 배포하면 모든 응용 프로그램을 한 번에 수정할 수 있습니다.

문제를 해결하려면 API를 변경하면 해당 어셈블리의 어셈블리 버전을 변경해야합니다. 이렇게하면 융합 엔진이 로컬 폴더에있는 버전을 선택합니다.

+0

답변을위한 Tks, 특히 마지막 부분에 대한 버전. – Dante

7

예 GAC를 먼저 확인하십시오. 로딩 규칙은 here에 설명되어 있습니다. 문제를 해결하려면 API를 변경할 때 어셈블리 버전을 업데이트해야합니다.

+0

링크를위한 Tks는 매우 유용합니다! – Dante