글로벌 어셈블리 캐시
Global Assembly CacheGlobal Assembly Cache(GAC; 글로벌어셈블리 캐시)는 Microsoft 의 Common Language Infrastructure(CLI; 공통언어 인프라스트럭처)용 머신 전체의 CLI 어셈블리 캐시입니다.NET 프레임워크특별히 제어된 중앙 저장소를 갖는 접근 방식은 공유 라이브러리 개념의 결함을[citation needed] 해결하고 DLL 지옥과 같은 단점을 초래하는 다른 솔루션의 함정을 방지하는 데 도움이 됩니다.
요구 사항들
GAC에 있는 어셈블리는 다른 코드버전을 병렬로 실행할 수 있는 특정 버전 관리 방식을 준수해야 합니다.특히, 이러한 어셈블리는 강하게 명명되어야 합니다.
사용.
GAC와 대화하는 방법에는 Global Assembly Cache Tool(gacutil.exe)과 Assembly Cache Viewer(shfusion.dll)의 두 가지가 있습니다.
글로벌 어셈블리 캐시 도구
가쿠틸exe는 에 탑재된 오래된 명령줄 유틸리티입니다.NET 1.1 및는 에서 사용할 수 있습니다.NET SDK.[1]
다음 명령을 사용하여 GAC에서 공유 어셈블리의 가용성을 확인할 수 있습니다.
gacutil.exe /l <assemblyName>
다음 명령을 사용하여 공유 어셈블리를 GAC에 등록할 수 있습니다.
gacutil.exe /i <assemblyName>
또는 어셈블리 파일을 다음 위치에 복사합니다.
%windir%\assembly\
에 주의해 주세요.NET 4.0 GAC의 위치는 다음과 같습니다.
%windir%\마이크로소프트(MS.NET\어셈블리\
/? 플래그를 사용하는 경우 이 유틸리티의 다른 옵션에 대해 간단히 설명합니다.
gacutil.exe /?
어셈블리 캐시 뷰어
새로운 인터페이스인 어셈블리 캐시 뷰어는 Windows [2]탐색기에 통합되어 있습니다.브라우징%windir%\assembly\(예를 들어,C:\WINDOWS\assembly) 또는 %WINDIR%\Microsoft.NET\assembly는 캐시에 포함된 어셈블리와 버전, 문화, 공개키 토큰 및 프로세서아키텍처를 표시합니다.어셈블리는 드래그 앤 드롭 방식으로 설치 및 제거되며 삭제 키를 선택하고 누르거나 상황에 맞는 메뉴를 사용합니다.
의 기동과 함께.NET Framework 4, Assembly Cache Viewer 셸 확장은 [3]사용되지 않습니다.
사용 예
컴퓨터에는 AssemblyA라는 이름의 CLI 어셈블리가 두 개 있지만 하나는 버전 1.0이고 다른 하나는 버전 2.0입니다.둘 다 AssemblyA라는 이름의 파일로 컴파일해야 하므로 FAT32 파일시스템 내의 같은 디렉토리에 존재할 수 없습니다.대신 GAC의 가상 파일시스템은 어셈블리의 각 버전을 사용해야 하는 프로그램에서 사용할 수 있습니다.
실행
구성으로서의 GAC는 실제로 Windows OS 내에 존재하지 않습니다.이 기능은 CLI에 의해 구현 및 관리됩니다.%systemroot% 내의 폴더에 어셈블리 및 Microsoft라는 이름이 붙었습니다.NET\assembly(용).NET 4.0)에는 버전 및 공개 키 토큰을 포함할 수 있도록 관리되는 파일 이름을 가진 글로벌하게 사용 가능한 모든 어셈블리가 포함되어 있습니다.따라서 각 버전은 동일한 위치 내에 존재하며 코드 진입점 위치를 정상적으로 유지하기 위해 후속 버전을 필요로 하지 않고 호출할 수 있습니다.명령줄에서 어셈블리를 설치할 수 있는 경우에만 이 폴더에 끌어다 놓을 수 있습니다.
호출 어플리케이션은 어셈블리의 버전을 참조할 때 지정할 수 있습니다.따라서 런타임은 단순히 파일 이름을 참조하여 올바른 것을 사용할 수 있습니다.
함정
Global Assembly Cache 메커니즘은 오래된 DLL Hell을 방지하는 데 도움이 되지만 다음과 같은 [4]몇 가지 단점이 있습니다.
- 기본적으로 응용 프로그램은 의 버전에서만 실행됩니다.이 컴파일에는 NET Framework가 사용되었습니다.이것에 의해, 의 새로운 버전의 머신에서 애플리케이션이 장해가 발생하는 일이 있습니다.설치된 NET Framework - 응용 프로그램이 새 버전에서 정상적으로 실행되는 경우에도 마찬가지입니다.
- 코어 중 일부가 있는 경우 조건부 컴파일을 사용해야 할 경우가 있습니다.NET 콜(애플리케이션에서 사용)은 프레임워크의 일부 버전에서만 지원됩니다.
- 네이티브 코드에 의존하는 .NET 애플리케이션은 GAC 메커니즘을 사용하더라도 비호환성이 발생할 수 있습니다.
- GAC에 추가되는 모든 어셈블리에 강력한 이름을 붙여야 합니다.국회를 '강명'으로 만드는 과정은 경우에 따라 상당히 고통스러울 수 있다.예를 들어 어셈블리가 이름이 강력하지 않은 다른 어셈블리에 의존하는 경우 해당 어셈블리는 GAC에 등록할 수 없습니다.서드파티 어셈블리의 코드가 프로그래머가 소유하고 있지 않은 경우 어셈블리의 이름을 강하게 붙이도록 변환하는 것은 사실상 불가능할 수 있습니다.
- 표준 Windows API를 사용하여 파일을 검색하면 탐색기가 GAC의 사용자 친화적인 보기를 표시할 때 "어셈블리" 폴더 아래에 있는 DLL을 선택할 수 없습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "Global Assembly Cache Tool (Gacutil.exe)". Redmond, Washington: Microsoft Corporation. Retrieved 2010-05-27.
- ^ "Assembly Cache Viewer (Shfusion.dll)". Redmond, Washington: Microsoft Corporation. Retrieved 2010-05-27.
- ^ "How to: View the Contents of the Global Assembly Cache". Redmond, Washington: Microsoft Corporation. Retrieved 2010-07-22.
- ^ John, Mueller (2005-02-11). "Ten Managed Application Pitfalls that Kill Version Compatibility". devsource.com. Archived from the original on 2013-01-21. Retrieved 2008-01-26.