GAC에서 어셈블리를 추출하는 방법은 무엇입니까?


134

어셈블리를 GAC에 직접 설치하는 패키지가 있습니다 (예 : % windows % / assembly의 깊은 곳).

GAC에서 실제 파일 시스템으로 실제 어셈블리 (DLL)를 어떻게 제거합니까?

감사.

답변:


150

이 기사 의 조언을 사용하여 GAC에서 어셈블리를 얻었습니다.

GAC에서 DLL 가져 오기

GAC에 배포 된 DLL (일반적으로 c : \ windows \ assembly에 위치)은 일반 DLL 파일로 보거나 사용할 수 없습니다. VS 프로젝트에서 직접 참조 할 수 없습니다. 개발자는 일반적으로 원본 DLL 파일의 사본을 보관하고 프로젝트 실행시 GAC의 어셈블리를 사용하는 개발 (디자인)시 프로젝트에서 해당 DLL 파일을 참조합니다.

GAC에서 어셈블리가 서명되고 배포 된 것으로 확인되면 실행 (런타임) 동안 CLR은 VS에서 디자인 타임 동안 참조 된 DLL 대신 GAC에서 어셈블리를 자동으로 선택합니다. 개발자가 원본 DLL을 삭제했거나 어떤 이유로 든 가지고 있지 않은 경우 GAC에서 DLL 파일을 가져 오는 방법이 있습니다. GAC에서 DLL을 복사하려면 다음 단계를 수행하십시오.

  1. regsvr32 / u C : \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ shfusion.dll을 실행하십시오.

    • shfusion.dll은 GAC 폴더를 뚜렷하게 보여주는 탐색기 확장 DLL입니다. 이 파일을 등록 해제하면 어셈블리 캐시 뷰어가 제거되고 GAC 폴더가 탐색기에서 일반 폴더로 표시됩니다.
  2. "% windir % \ assembly \ GAC_MSIL"을 엽니 다.

  3. DLL 폴더를 찾아 깊은 곳으로 이동하여 DLL을 찾으십시오.

  4. 하드 디스크 어딘가에 DLL을 복사하고 프로젝트에서 참조하십시오.

  5. "regsvr32 % windir % \ Microsoft.NET \ Framework \ <. NET version directory> \ shfusion.dll"을 실행하여 shfusion.dll 파일을 다시 등록하고 GAC의 원래 고유 한 뷰를 다시 얻으십시오.


81
이것은 작동하지만 조금 복잡합니다. 명령 프롬프트를 두려워하지 않으면 필요한 디렉토리로 cd하고 DLL을 그런 식으로 복사하면됩니다.
Cheeso

3
TotalCommander를 설치하고 모든 숨겨진 파일을 볼 수있는 옵션을 활성화하면 원하는 모든 어셈블리를 얻을 수 있습니다.
Patrick Peters

4
@Andrew, 옵션을 전달할 때 호출되는 진입 점을 shfusion.dll지원하지 않는 것 같습니다 . 이 옵션을 생략하면 구성 요소를 다시 등록 할 수 있습니다. DllInstall()regsvr32/i
프레데릭 하 미디

9
1 단계와 2 단계를 건너 뛰고 % windir % \ assembly \ GAC_MSIL로 바로 이동하여 거기서 찾을 수 있습니다.
Christian Fredh

5
@ChristianFredh 참고 사항 : 나에게 이것은 실행 대화 상자에서만 직접 수행 할 수 있습니다.
xr280xr 2018


84

명령 프롬프트를 열고 다음을 입력하십시오.

cd  c:\windows\assembly\GAC_MSIL 

xcopy . C:\GacDump /s /y

이것은 전체 GAC의 덤프를 제공해야합니다

즐겨!


10
Deepak의 대답은 더 명확하고 적절한 플래그와 함께 xcopy를 사용했습니다.
katbyte

단계별 접근법에 대한 문제를 겪은 후 모든 것을 얻는 데 5 초가 걸렸 으므로이 답변을 # 1로 평가했습니다.
FBryant87

24

예.

DisableCacheViewer 레지스트리 키 추가

HKLM \ Software \ Microsoft \ Fusion \ 아래에 DisableCacheViewer라는 이름으로 새 dword 키를 만들고 [DWORD] 값을 1로 설정하십시오.

Windows 탐색기로 돌아가서 어셈블리 폴더로 돌아 가면 일반적인 파일 시스템보기가됩니다.


2
저평가 답변. 감사!
xr280xr 2018

1
이것이 실제 솔루션입니다. 취소하기 쉽고 명령 줄이 필요하지 않습니다.
user2920518

16

가장 쉬운 방법은 David가 언급 한 것처럼 명령 줄을 통해 수행하는 것입니다. 유일한 트릭은 .dll이 단순히 C : \ Windows \ Assembly에 있지 않다는 것입니다. C : \ Windows \ Assembly \ GAC \ [ASSEMBLY_NAME] \ [VERSION_NUMBER] _ [PUBLIC KEY]로 이동해야합니다. 그런 다음 다음을 사용하여 복사를 수행 할 수 있습니다.

[ASSEMBLY_NAME] .dll c : \ (또는 원하는 위치)를 복사하십시오.

희망이 도움이됩니다.


13

내가 찾은 쉬운 방법은 명령 프롬프트를 열고 원하는 DLL을 찾을 때까지 언급 한 폴더를 탐색하는 것입니다. 복사 명령을 사용하여 가져올 수 있습니다. Windows 탐색기에는이 폴더에 대한 "유용한"특수보기가 있습니다.


오늘 아침에 흥미로운 문제가 발견되었습니다. GAC에서 DLL을 업데이트하고 cmd 라인 방법을 사용하여 백업을 수행했습니다. 새 DLL (동일한 버전 번호)을 업로드하려고 할 때 cmd 창을 종료했을 때만 사라지는 오류가 발생했습니다. 무엇이 잘못되었는지 알아 내기 위해 몇 분 동안 저주를 받았습니다!
NeilD

11

열기 RUN은 다음 입력 %windir%\assembly\GAC_MSIL하면 다음 탐색 당신의 DLL에라는 이름의 폴더 수있는이 폴더 '보기에서 DLL을 열 것, 그것을 열고, 당신은 당신의 DLL 파일을 발견하고 쉽게 복사


매우 쉬운 솔루션. 감사합니다.
Dblock247

4

저는 PowerShell GAC 의 저자입니다 . PowerShell GAC를 사용하면 폴더 구조 변경과 같은 GAC 내부에 의존하지 않고 GAC에서 어셈블리를 추출 할 수 있습니다.

Get-GacAssembly SomeCompany* | Get-GacAssemblyFile | Copy-Item -Dest C:\Temp\SomeCompany

3

MSDN 블로그 게시물에서는 GAC에서 DLL을 추출하는 세 가지 방법을 설명합니다. 지금까지 제공된 방법에 대한 유용한 요약.


3

대신 파일 브라우저 "Total Commander"를 사용하십시오.

  1. Total Commander에서 "숨겨진 / 시스템 파일 표시"설정 사용
  2. "c : \ windows \ assembly"로 이동

3

레지스트리를 수정하거나 명령 줄, powershell 또는 다른 프로그램을 사용하지 않고 GAC 내부를 살펴볼 수있는 방법을 찾았습니다.

새 바로 가기를 만듭니다 (어디서나). 그런 다음 대상을 갖도록 바로 가기를 수정하십시오.

%windir%\assembly\GAC_MSIL\System

이 바로 가기를 열면 GAC 내부의 시스템 폴더 (모든 사람이 가져야 함)로 이동하여 더 높은 디렉토리로 전환 한 다음 원하는 다른 폴더를 탐색 할 수있는 놀라운 부작용이 있습니다 (dll 파일 등 참조).

Windows 7 및 Windows Server 2012에서 이것을 테스트했습니다.

참고 : 바로 가기를 만들 때 해당 대상을 사용할 수는 없지만 편집 할 수는 있습니다.

즐겨!


2

C : \ Windows로 이동하여 [assembly] 폴더를 마우스 오른쪽 버튼으로 클릭하고 아카이브에 추가를 선택하십시오.

조금만 기다려

vola GAC의 모든 어셈블리를 포함하는 아카이브 파일이 있습니다.


2

Powershell 스크립트에서이를 시도 할 수 있습니다. GAC에는 단일 버전의 어셈블리 만 있었으므로 정상적으로 작동했습니다.

cd "c:\Windows\Microsoft.NET\assembly\GAC_MSIL\"
Get-ChildItem assemblypath -Recurse -Include *.dll |  Copy-Item -Destination "c:\folder to copy to"

어셈블리 경로에서 와일드 카드를 사용할 수있는 위치


0

다른 방향으로는 MSI 파일의 포장을 풀고 그 방법으로 좋은 점을 얻으십시오. 최종 설치 제거를 방지합니다. . .


0

명령 줄에서 복사 할 필요가 없습니다. 시작 창 검색에서 DLL 이름을 입력했습니다. 더 많은 결과보기를 선택했습니다. GAC에있는 것이 검색 창에 반환되었습니다. 나는 그것을 마우스 오른쪽 버튼으로 클릭하고 열린 파일 위치를 말했다. 일반 Windows 탐색기에서 열었습니다. 파일을 복사했습니다. 나는 창문을 닫았다. 끝난.

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