가끔씩 GAC 에 등록되어 있는 Assembly 의 DLL 이 필요할 수 있습니다. 하지만 일반적으로 윈도우 탐색기를 통해 GAC 폴더를 탐색하게 되면, 파일을 복사할 수 없는 형태의 View 가 뜨게 됩니다.
 
[그림1] 윈도우 탐색기를 통해 보는 GAC Assembly 목록
 
이런 경우엔 Visual Studio 에서 GAC Assembly 를 참조하고, 파일 복사(File Copy) 옵션을 “예(Yes)” 로 주시면, GAC 의 DLL 의 복사본이 떨어지긴 합니다. 하지만, 매우 번거로운 작업입니다.
 
GAC Assembly 폴더는 어디에 있나요??
%WINDIR%\Assembly 폴더에 있습니다.
 
하지만, 간단하게 레지스트리의 값을 수정하여 GAC Assembly 의 폴더를 구조적으로 탐색할 수 있네요.
 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\DisableCacheViewer=1 (DWORD)
 
위와 같이 레지스트리를 추가하시고 GAC Assembly 폴더를 열면, GAC Assembly 를 윈도우 탐색기를 통해 Assembly 별, Version 별로 탐색이 가능합니다.
 
[그림2] 윈도우 탐색기를 통해 GAC Assembly 탐색
 
아무튼 이런 숨은 옵션들이 왜이리 많은지 ^^; 이런 숨은 옵션 가이드 문서는 어디 없나?? 시간 나면 찾아봐야겠습니다. ^^
 
References
 

Posted by 땡초 POWERUMC
TAG c#, GAC

댓글을 달아 주세요

C# 코드로 GAC 어셈블리 등록하기
 
예전에 MSDN Forum 에 자료를 찾던 중에 “C# 코드를 이용하여 GAC 에 어셈블리를 등록할 수 없나요?” 라는 질문을 본적이 있었습니다.
아마, 그때 답변은 엉뚱한 답변들이었죠. 물론, 저도 오늘의 이 코드를 보기 전까지 말이죠^^;
 
희미하게 기억이 날듯 말듯 합니다만, 그때 답변중의 내용이 RegisterAssembly 였던 것 같기도 합니다. 이 메서드는 COM Interop 에 등록하는 메서드인데 말이죠.. ㅎㅎ
 
그래서 혼자 생각했었습니다.
배포 시에 GAC 에 어셈블리를 등록할 경우가 생긴다면,,
1.      GacUtil 을 리소스에 포함한다.
2.      Deploy Project 에서 리소스를 파일로 복원하여, Command Prompt(Process.Start) 를 통해 GACUTIL 로 등록하고,
3.      배포를 종료한다
 
이런 시나리오를 머리 속으로 그렸던 적이 있었습니다.
하지만 오늘 단 한 줄이 이 코드를 보고, ‘정말 어리석었구나’ 느꼈답니다.
 
뭐 긴말 없이, 코드를 보시죠.
 
new System.EnterpriseServices.Internal.Publish()
.GacInstall(@”...Path...\ClassLibrary1.dll");
 
이렇게 한 줄로, GAC 에 어셈블리를 등록할 수 있었답니다. ( 두 줄이라고 우기지 마세요 -_-; )
 
아마 저처럼 테스트 해 보실 분도 계실 거라고 생각합니다. 10의 2~3명은 “어!! 안되는데요!!” 라고 하실겁니다.
Strong Key 를 주시고, 다시 해보세요^.^
( 훔… Strong Key 로 서명이 안되어 있어도, 오류는 없더군요 )
 
머.. 뒷북이라면 당신은 대략 “지못미!!”
 
Reference
 

Posted by 땡초 POWERUMC
TAG c#, GAC

댓글을 달아 주세요