C#

90.C# - 전역어셈블리캐시 ( Assembly )

Godffs 2009. 9. 2. 09:00
반응형

어셈블리는 전용과 공유 두가지로 분리됩니다.
전용 : 자신만이 사용하는 어셈블리어, DLL파일이 프로젝트에 복사됨
공유 : 여러 사람들이 사용 가능한 어셈블리어로 C:\Windows\assembly
        폴더에 DLL파일을
추가 하여 사용 , 참조만 하고 복사되지 않음
        전역(공유)어셈블리캐시 예제입니다.


Watch.DLL 만들기

1. 새프로젝트 - 빈 솔루션 생성 후
2. 빈 솔루션 - 추가 - 새프로젝트 - C# - Windows - 클래스 라이브러리 추가
    (이름 : Watch)
3. 추가한 Watch에서 'program.cs' 파일을 삭제 후 Watch에서 클래스 추가
    (이름 : Clock)

Clock.cs
namespace Watch
{
    public class Clock
    {
        public static string NowTime()
        {
            return DateTime.Now.ToShortDateString();
        }
    }
}
코드 작성후 솔루션 빌드를 하여 Watch.DLL 파일을 생성합니다.

생성한 Watch.DLL 파일을 전역어셈블리어로 사용하기 위해서
C:\WINDOWS\assembly에 Watch.DLL 파일을 복사 붙여넣기를 합니다.
[그림28-1]
붙여넣기 하면 "어셈블리 'Watch.dll'에 강력한 이름이 필요합니다."라는
경고 메세지가 나타납니다.
이러한 메세지가 나타나야 정상이라고 보시면 됩니다.
이 문제를 해결하기 위해서는 이보다 강력한 키값을 주면 됩니다.


[그림28-2]
시작 - 모든프로그램 - Microsoft Visual Studio 2008 -
        Visual Studio Tools-Visual Studio 2008 명령 프롬프트 실행

명령프롬프트에서 snk파일을 생성합니다.
[그림28-3]        snk파일을 만들 경로 이동 후
        sn.exe -k Watch.snk를 입력 후 결과 확인

다시 Visual Studio 작업 화면으로 넘어갑니다.
솔루션탐색기에서 생성한 클래스 라이브러리의 속성페이지로 이동합니다.
속성페이지 - 성명탭에서 - 어셈블리 성명 채크 후 "강력한 이름 키 파일 선택"
클릭 후
위에서 명령프롬프트에서 생성한 Watch.snk를 지정 후
속성페이지를 닫고 솔루션탐색기에
Watch.snk가 추가 되었는지 확인 합니다.
[그림28-4]Watch클래스 라이브러리 "다시 빌드"

빌드 한 후 해당 프로젝트의 폴더에서 Debug 폴더로 이동하여
Watch.DLL 파일을
다시 한 번 C:\Windows\assembly폴더 복사(이동)
[그림28-5]오류 없이 복사가 된것을 확인 합니다.

        전역어셈블리로 추가한 Watch.DLL 파일을 이용한 간단한 예제 입니다.
1. 프로젝트에서 "C# - 콘솔응용프로그램"을 추가합니다.(UseWatch)
2. 추가한 콘솔응용프로그램에서 참조페이지를 열고 Watch를 추가합니다.
3. 코드 작성 후 UseClock프로젝트를 시작페이지로 설정 후 빌드 후 결과확인
[그림28-6][그림28-7]

Programe.cs
namespace UseWatch
{
    public class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Watch.Clock.NowTime());
        }
    }
}

결과확인

[그림28-8]

보통 해당 프로젝트에 참조파일을 추가 하게 되면 빌드(실행)시 "Debug폴더"에
참조파일이 추가되는것을 확인 할 수 있는데 전역(공통) 어셈블리를 통해서
참조파일이
추가 되지 않았음을 확인 할 수 있습니다.
[그림28-9]
90Assembly.zip
반응형