문제

상황을 단순하게 유지하면서 로컬 폴더, 관련 구성 파일, 게시자 정책 또는 사용자 지정 해상도에 DLL이 없다고 가정합니다.참조된 DLL이 있는 유일한 위치는 GAC입니다.

퓨전은 GAC에서 어떤 버전의 DLL을 사용할지 어떻게 결정합니까(다른 모든 항목은 동일함)? 우선순위는 무엇입니까?

예를 들어 내 프로젝트에서 버전 10.5.0.0의 DLL을 참조했습니다.버전 10.5.0.0 또는 10.5.1.0의 DLL을 선택합니까?또는 GAC에 버전 10.4.0.0만 있는 경우 작동하거나 오류가 발생합니까?이러한 규칙은 변경되는 주요/부/빌드/개정 부분인지 여부에 따라 변경됩니까?

프로젝트 참조 "특정 버전"이 True 또는 False로 설정된 경우 이것이 어떻게 다릅니까?

참조가 DLL 참조인지 프로젝트 참조인지는 어떻게 다릅니까?

어딘가에 이것이 어떻게 작동하는지 설명하는 MSDN 웹사이트가 있을 것 같지만 찾을 수 없는 것 같습니다.나는 동작을 무시하려는 것이 아니라 기본 동작이 무엇인지 알고 싶습니다.

도움이 되었습니까?

해결책

MSDN에 문서화되어 있습니다. 런타임이 어셈블리를 찾는 방법.특히 GAC는 강력한 이름을 사용하여 어셈블리가 로드된 경우에만 검색됩니다.다른 어셈블리로 "리디렉션"하는 게시자 정책이 여전히 있을 수 있지만 자동 규칙은 없습니다.

제 생각에는 GAC는 Microsoft에서 .NET Framework용으로 사용해야 하는 것일 뿐이며 GAC를 사용하지 않고 응용 프로그램이나 라이브러리를 배포하면 많은 어려움을 제거할 수 있습니다(물론 .NET Framework 제외).

특정 버전의 어셈블리를 참조하는 것은 빌드 시간 속성이며 런타임 동작에 영향을 주지 않습니다.그러나 어셈블리 참조가 실행 파일로 컴파일되면 버전이 실행 파일에 저장되고 런타임에 해당 특정 버전이 로드됩니다(어셈블리 리디렉션 규칙이 적용된 후).

요약하면 다음과 같습니다..NET에서 요청된 어셈블리의 다른 버전을 로드하려면 어셈블리 리디렉션이 있어야 합니다.애플리케이션은 app.config 파일에서 리디렉션을 제공할 수 있으며 GAC에는 게시자 정책이 있을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top