Programing

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

lottogame 2020. 6. 28. 18:25
반응형

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


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

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

감사.


이 기사 의 조언을 사용하여 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의 원래 고유 한 뷰를 다시 얻으십시오.


여기에 설명 된 방법은 매우 쉽습니다.

http://andreasglaser.net/post/2008/08/05/Extract-assembly-from-Global-Assembly-Cache-(GAC)-with-network-drive-mapping.aspx

기사에서 요약 :

  • 네트워크 드라이브 매핑 (탐색기-> 도구)
    • \ servername \ 폴더 ( \\YourServer\C$\Windows\Assembly)에 매핑
  • 관리자 인 경우 공유 할 필요가 없습니다
  • 드라이브를 탐색하고 어셈블리를 추출하십시오.

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

cd  c:\windows\assembly\GAC_MSIL 

xcopy . C:\GacDump /s /y

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

즐겨!


예.

DisableCacheViewer 레지스트리 키 추가

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

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


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

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

희망이 도움이됩니다.


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


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


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

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

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


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

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

%windir%\assembly\GAC_MSIL\System

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

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

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

즐겨!


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

조금만 기다려

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


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

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

From a Powershell script, you can try this. I only had a single version of the assembly in the GAC so this worked just fine.

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

where the assembly path can use wildcards.


One other direction--just unpack the MSI file and get the goodies that way. Saves you from the eventual uninstall . . .


Copying from a command line is unnecessary. I typed in the name of the DLL from the Start Window search. I chose See More Results. The one in the GAC was returned in the search window. I right clicked on it and said open file location. It opened in normal Windows Explorer. I copied the file. I closed the window. Done.

참고URL : https://stackoverflow.com/questions/714907/how-to-extract-an-assembly-from-the-gac

반응형