.NET의 GAC 란 무엇입니까?


187

평신도를위한 GAC에 대한 짧은 개요를 찾고 링크는 아닙니다.

답변:


177

따라서 기본적으로 충돌에 대해 걱정하지 않고 DLL을 전역 적으로 액세스 할 수있는 방법입니다. 더 이상 DLL 지옥. 각 아키텍처와 버전은 살기 좋은 곳입니다.

또한 탐색기에서 탐색 할 수있는 자체 방법을 얻습니다.

C : \ Windows \ 조립

Windows 탐색기에는 모든 DLL이 나열됩니다.

그러나 당신이 시작 cmd하면 그것이 실제로 어떻게 구성되어 있는지 볼 수 있습니다 :

C : \ Users \ tritter> cd C : \ Windows \ assembly

C : \ Windows \ assembly> dir

 C : \ Windows \ assembly의 디렉토리

2009 년 7 월 20 일 02:18 오후 <DIR> GAC
2009 년 6 월 17 일 04:22 오후 <DIR> GAC_32
2009 년 6 월 17 일 04:22 오후 <DIR> GAC_64
2009 년 6 월 17 일 04:22 오후 <DIR> GAC_MSIL
 ...한조각...
               0 파일 0 바이트
               9 Dir (s) 90,538,311,680 바이트 무료

C : \ Windows \ assembly> cd GAC_64

C : \ Windows \ assembly \ GAC_64> dir

 C : \ Windows \ assembly \ GAC_64 디렉토리

2009 년 6 월 17 일 오후 4시 22 분 <DIR>.
2009/06/17 04:22 오후 <DIR> ..
2008 년 1 월 19 일 오전 9시 54 분 <DIR> blbproxy
 ...한조각...
2008 년 1 월 19 일 오전 9시 54 분 <DIR> srmlib
2008 년 1 월 19 일 06:11 오전 <DIR> System.Data
2008 년 1 월 19 일 오전 6시 11 분 <DIR> System.Data.OracleClient
 ...한조각...
               0 파일 0 바이트
              34 Dir (s) 90,538,311,680 바이트 무료

C : \ Windows \ assembly \ GAC_64> cd 시스템. 데이터

C : \ Windows \ assembly \ GAC_64 \ System.Data> dir
 C : \ Windows \ assembly \ GAC_64 \ System.Data의 디렉토리

2008 년 1 월 19 일 오전 6시 11 분 <DIR>.
2008 년 1 월 19 일 오전 6시 11 분 <DIR> ..
2009 년 4 월 11 일 오후 12시 20 분 <DIR> 2.0.0.0__b77a5c561934e089
               0 파일 0 바이트
               3 Dir (s) 90,538,311,680 바이트 무료

C : \ Windows \ assembly \ GAC_64 \ System.Data> cd 2.0.0.0__b77a5c561934e089

C : \ Windows \ assembly \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089> dir

 C : \ Windows \ assembly \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089의 디렉토리

2009 년 4 월 11 일 오후 12시 20 분 <DIR>.
2009 년 4 월 11 일 오후 12시 20 분 <DIR> ..
04/11/2009 12:12 오후 3,008,512 System.Data.dll
               1 파일 3,008,512 바이트
               2 Dir (s) 90,538,311,680 바이트 무료

C : \ Windows \ assembly \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089>

여기에서 System.Data의 버전 2.0.0.0__b77a5c561934e089를 볼 수 있습니다.

DLL은 5 개 부분으로 식별됩니다.

  1. 이름
  2. 버전
  3. 건축물
  4. 문화
  5. 공개 키

처음 3 개는 일반적으로 큰 것이지만.


12
"dll hell"을 피하면서 .dll을 전역 적으로 참조 할 수있는 새로운 방법이라고 언급하면 ​​+1이됩니다. (dll 지옥이 무엇인지, GAC가 어떻게 주변에 도착했는지에 대한 더 나은 대답이 될 것입니다 ... 기본 개요가 있지만 ... 단단히 조일 것입니다 디렉토리 구조가 삽입되고 dll이 식별되고 독창적 인 방식을 조금 추가하십시오) 너무 부정적인 소리를 의미하지는 않습니다 ... +1을주었습니다!
Beska

링크를 제공하지 마십시오 :]. "GAC_64"디렉토리 이름으로 "3. Architecture"가 지정되어 있습니까? 그리고이 경우 문화는 비어 있습니까? "__"밑줄 사이의 값입니까?
Danny Bullis

2
GAC는 .NET 앱에만 존재합니까?
Zach Smith

93

GAC = 글로벌 어셈블리 캐시

그것을 분해하자 :

  • 글로벌-전체 머신에 적용
  • 어셈블리-.NET에서 DLL (코드 라이브러리)이라고 부르는 것
  • 캐시-더 빠르고 일반적인 액세스를 위해 물건을 저장하는 장소

따라서 GAC는 컴퓨터에서 실행중인 모든 응용 프로그램에 액세스 할 수 있도록 코드 라이브러리를 저장할 수있는 장소 여야합니다.


64

글로벌 어셈블리 캐시

공용 언어 런타임이 설치된 각 컴퓨터에는 전역 어셈블리 캐시라고하는 컴퓨터 전체의 코드 캐시가 있습니다. 전역 어셈블리 캐시는 컴퓨터의 여러 응용 프로그램에서 공유하도록 특별히 지정된 어셈블리를 저장합니다.

필요할 때만 전역 어셈블리 캐시에 어셈블리를 설치하여 어셈블리를 공유해야합니다. 일반적인 지침으로 어셈블리 종속성을 비공개로 유지하고 어셈블리 공유가 명시 적으로 요구되지 않는 한 응용 프로그램 디렉토리에서 어셈블리를 찾습니다. 또한 COM interop 또는 관리되지 않는 코드에 액세스 할 수 있도록 어셈블리를 전역 어셈블리 캐시에 설치할 필요가 없습니다.

MSDN에 포함 된 것들이 당신을 놀라게 할 수 있습니다 ... 일반적으로 기사처럼 읽을 수 있습니다. 상단에서 가장 간단하고 중요한 부분은 복잡한 세부 사항을 자세히 설명합니다. 그것은 내가 할 수있는 것보다 확실히 더 잘 설명합니다.

Visual Studio는 GAC의 모든 DLL을 참조 창의 .NET 탭에 표시합니다. (솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 참조 추가를 선택하십시오.) 그러면보다 복잡한 아이디어를 얻을 수 있습니다.


그는 아무 링크도 말하지 않고 자신의 말로 설명을 원했습니다.
user142350

그의 게시물의 원래 버전에서 (빠르게 편집했다고 생각합니다) 지정되지 않았습니다!
Noldorin

15
또한 MSDN의 단어는 항상 더 정확하고 정확합니다. :)
Noldorin


12

GAC (전역 어셈블리 캐시)는 시스템에서 실행되는 모든 응용 프로그램에서 공유하도록 특별히 지정된 .NET 어셈블리를 저장하기위한 Windows 디렉터리의 폴더입니다. 전역 어셈블리 캐시 (GAC)에 등록하여 어셈블리를 컴퓨터의 여러 응용 프로그램간에 공유 할 수 있습니다. GAC는 .NET Framework에서 유지 관리하는 시스템 전체의 로컬 어셈블리 캐시입니다.


11

Exe Application은 우선 현재 디렉토리에서 하위 디렉토리로 참조합니다. 그런 다음 시스템 디렉토리. VS6.0 시스템 디렉토리는 ..windows / system32였습니다. .NET 시스템 디렉토리는 아래 GAC 경로와 같습니다.

  1. GAC 경로

    1) C : \ Windows \ Assembly (.NET 2.0 ~ 3.5)

    2) C : \ Windows \ Microsoft.NET \ assembly (.NET 4.0 용)

  2. GAC에 어셈블리를 설치하는 방법 (관리자 권한)

    1) 드래그 앤 드롭

    2) Visual Studio 명령 프롬프트와 함께 GacUtil.exe 사용

     gacutil -i [Path][Assembly Name].dll
    • 참고 : GAC에 어셈블리를 설치하려면 어셈블리 이름을 지정해야합니다. 그렇지 않으면 다음과 같은 오류가 발생합니다. 캐시에 어셈블리 추가 실패 : 강력한 이름없이 어셈블리를 설치하려고합니다.
  3. GAC에서 어셈블리를 제거하는 방법 (관리자 권한)

     gacutil -u [Assembly Name], Version=1.0.0.0, PublickeyToken=7896a3567gh
    • 참고 : 확장자가 없습니다 (.dll). GAC 어셈블리에서 버전 및 PublickeyToken을 생략하고 확인할 수 있습니다.

5

실제 파일과 인터페이스 및 위치 정보와 관련하여 COM 레지스트리가 올바르게 수행 된 것과 같습니다. COM에서는 중앙 집중화 된 메타 데이터가있는 파일이 어디에나있었습니다. GAC는 강타 촬영을 중앙 집중화합니다.


5

GAC (Global Assembly Cache)는 모든 공유 .NET 어셈블리가있는 곳입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.