Development Tip

bin과 gac 모두에있는 DLL, 어느 것이 사용됩니까?

yourdevel 2020. 11. 8. 11:19
반응형

bin과 gac 모두에있는 DLL, 어느 것이 사용됩니까?


프런트 엔드 만 변경하여 많은 웹 사이트에 배포 된 웹 애플리케이션이 있고, 공유 백엔드 부분에는 GAC에 DLL이 있으므로 해당 dll을 하나만 업데이트하면 모든 사이트가 업데이트를받습니다.

새로운 기능이 출시되기 전에 테스트하기 위해 / bin 폴더의 DLL로 GAC를 재정의하는 방법이 있습니까?


참조 된 DLL과 동일한 버전 번호가있는 경우 GAC가 사용됩니다.

버전 번호를 늘리면 새 버전 번호를 참조하는 웹 사이트를 다시 빌드하고 새 버전을 / bin 디렉토리에 넣으면 해당 DLL이 사용됩니다.

버전 번호를 변경하고 싶지 않다면 운이 좋지 않습니다.

.NET은 강력한 이름의 어셈블리를로드 할 때 먼저 사용할 버전 번호를 결정하려고합니다. 먼저 참조를 통해이 작업을 수행 한 다음 게시자 정책 을 찾은 다음 구성 파일에서 바인딩 리디렉션찾습니다 .

이 작업을 수행 한 후 GAC에서 어셈블리를 찾은 다음 지정된 코드베이스 에서 DLL에 대한 다양한 파일 시스템 폴더를 검색합니다. 이러한 단계 중 하나에서 올바른 버전 어셈블리를 찾으면 중지됩니다.

강력한 명명 된 어셈블리의 버전 번호를 변경하지 않는 경우 .NET은 GAC에서 원본을 찾고 검색을 중지합니다. 하나를 찾으면 중지되고 GAC를 먼저 찾는 것이기 때문에 새 버전 번호를 지정하지 않는 한 어셈블리에 대한 코드베이스를 지정해도 소용이 없습니다.


<codebase>요소를 사용하여 \ bin 폴더의 어셈블리로 GAC를 재정의 할 수있었습니다 .

<codebase version="1.2.3.4" href="/bin/MyAssembly.dll" />내 web.config 파일에서 지정하면 애플리케이션에 GAC에 지정된 버전이 아닌이 버전을 사용하도록 지시 할 수 있습니다.

<probing>어셈블리 위치를 지정하기 위해 요소를 살펴볼 수도 있습니다 .


나는 Adam Sills와 같은 생각을 말하는 것 같지만 이해를 위해 다시 표현했습니다. 내 자신의 테스트를 통해 다음과 같은 일이 발생하는 것처럼 보입니다.

  • 앱이 버전 1.0.0.0으로 컴파일되고 1.0.0.1이 GAC에있는 경우 / bin에서 .dll을 생략 할 수 있습니다.
  • 앱이 버전 1.0.0.1로 컴파일되고 1.0.0.0이 GAC에있는 경우 / bin에 .dll을 배치하여 GAC를 무시해야합니다. / bin에 최신 버전을 포함하지 않는 한 GAC 버전이 앱의 필수 버전보다 오래된 경우 오류가 발생합니다.

이것이 맞기를 바랍니다 ...


Windows SDK (소프트웨어 개발 키트)에 포함 된 어셈블리 바인딩 로그 뷰어 (Fuslogvw.exe)를 사용하여 로그 파일에서 바인딩 정보를 볼 수 있습니다.

에스

참고 URL : https://stackoverflow.com/questions/981142/dll-in-both-the-bin-and-the-gac-which-one-gets-used

반응형