Visual Studio 2008에서 파일 --> 새로만들기 --> 새 프로젝트 --> 기타프로젝트 형식 --> Visual Studio 솔루션에서 "빈솔루션"에 이름과 저장위치 정하고 "프로젝트" 생성하기 --> 솔루션 탐색기의 프로젝트(여기서는 "전역어셈블리캐시"로 프로젝트 이름지정)에서 마우스 우클릭 --> 추가 --> 새 프로젝트 추가에서 "프로젝트 형식 --> C#" --> "Visual Studio에 설치되어 있는 템플릿"에서 "클래스 라이브러리"선택 후 이름(여기서는 "Watch"로 클래스 라이브러리의 이름 지정)과 저장위치 정한 후 프로젝트 만들기 --> "Watch"클래스 라이브러리의 Class1.cs 삭제 --> "Watch"클래스 라이브러리 우클릭 --> 추가 --> 새항목 --> "클래스"로 선택하여 이름 지정후(여기서는 "Clock.cs"로 이름지정) "확인"버튼 클릭 --> "Clock.cs"에 현재시간을 출력하는 코드 작성 --> "Watch"에 마우스 우클릭하여 "빌드"하여 "C:\...\Watch\bin\Debug폴더에 생성된 "Watch.dll"파일 생성하기



==> "Watch" (클래스 라이브러리형식) 프로젝트의 Clock.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Watch
{
    public class Clock
    {
        public static string NowTime()
        {
            return DateTime.Now.ToShortTimeString();
        }
    }
}


"Watch.dll파일"(여기서는 "Watch"클래스 라이브러리의 Clock.cs에서 코드작성 후 빌드해서 생성한 "Watch.dll")을 "C:\Windows\assembly"폴더에 복사하려고 하면 'MessageBox'에서 "어셈블리 Watch.dll에 강력한 이름이 필요합니다"라고 경고가 나오며 복사가 거부된다. 이를 복사하기 위해서는 우선 콘솔창에서 다음과 같이 '스트롱네임키'파일을 생성한다.("시작 -> 모든프로그램 ->Microsoft Visual Studio 2008 -> Visual Studio Tools -> Visual Studio 2008 명령 프롬프트 '클릭' --> "콘솔창에서 아래 화면과 같이 sn.exe -k WatchKey.snk를 입력하여 "WatchKey.snk"를 생성한다.) -->




--> C드라이브에 생성된 "WatchKey.snk"파일을 "복사"하여 C:\...\Watch 폴더 안에 "붙여넣기"한다.) --> "Watch"클래스 라이브러리 마우스 우클릭 --> 속성 --> "서명"탭 선택 --> "어셈블리 서명"체크박스 서명한 후 '찾아보기'에서 "WatchKey.snk"파일이 복사된 경로를 찾아서 "WatchKey.snk"파일 선택(=열기) 후 '속성'창 닫기--> "Watch"클래스 라이브러리 마우스 우클릭하여 "다시 빌드"하여 "WatchKey.snk"파일이 복사(추가)되어 다시 생성된 "Watch.dll"파일을 만든다. -->


/* C드라이브에 생성된 "WatchKey.snk"파일을 "복사"하여 C:\...\Watch 폴더 안에 "붙여넣기"하고 '속성'에서 "서명"에 '체크 및 경로 지정'후 "다시 빌드"하면 'Visual Studio'의 '솔루션 탐색기'에서도 "WatchKey.snk"파일이 "Watch"프로젝트에 복사(삽입)된 것을 볼 수 있다. */





--> "WatchKey.snk"파일을 복사하고 "다시 빌드"해서 재생성된 "C:\...\Watch\bin\Debug폴더의 "Watch.dll"파일을 "C:\Windows\assembly"폴더에 추가(=복사/드래그&드롭)하면 "assembly"폴더에 "Watch.dll파일"이 추가(복사)된다.(이는 재생성된 "Watch.dll"파일이 "공용(전역)어셈블리캐시(=GAC)"에 등록되어 다른 프로젝트들에서도 "Watch.dll"파일을 사용(참조) 할 수 있게 된 것이다.) -->


/* C드라이브에 생성된 "WatchKey.snk"파일을 '복사'하여 'C:\...\Watch' 폴더 안에 "붙여넣기"한 후 '서명'에서 "WatchKey.snk"의 경로를 찾아서 선택 후 '다시 빌드'하여 다시 만들어진 "Watch.dll"파일이 "C:\Windows\assembly"폴더에 '붙여넣기(드래그&드롭)'하여 추가 된 화면 */



--> 이제 "assembly"폴더에 추가된 "Watch.dll"파일을 사용하는 프로젝트를 새로 하나 만든다.('파일' -> '새로 만들기' -> '프로젝트'클릭 -> '새 프로젝트'창에서 '프로젝트 형식 : Visual C#\Windows'로 선택하고 'Visual Studio에 설치되어 있는 템플릿'에서 '콘솔 응용 프로그램'으로 선택 후 '이름'(여기서는 "UseWatch"로 이름 지정)과 위치 지정하고 '확인'버튼 클릭) --> 새로 만든 "UseWatch"프로젝트의 "Program.cs"에서 "Watch"클래스 라이브러리 형식 프로젝트의 "Clock.cs"를 사용(참조)할 코드를 아래와 같이 작성해.("Program.cs"를 '속성'에서 '시작페이지로 설정' 할 것!)


==> "UseWatch" (콘솔 응용 프로그램)프로젝트의 Program.cs

// 전용 어셈블리 : DLL 파일이 프로젝트에 복사됨.
// 공용 어셈블리: 참조만하고 복사되지 않음.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

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


/* Program.cs를 실행해보면 콘솔창에 현재 시간이 출력된다. "C:\...\UseWatch\bin\Debug"폴더 안에는 아래 그림처럼 "Watch.dll"파일이 존재하지 않는다. 하지만 "C:\Windows\assembly"폴더에 "Watch.dll"파일이 공용(전역)어셈블리캐시(GAC)로 들어있어서 이 파일을 이용(참조)하여 "UseWatch" (콘솔 응용 프로그램)프로젝트의 Program.cs를 실행하였다. 실행결과 "Clock.cs"가 동작(반환)하는 내용인 현재시간이 콘솔에 출력된다. */









< 실행결과 >

--> "UseWatch.Program"을 속성에서 '시작페이지로 설정'한 후 "Program.cs"를 실행(Ctl + F5)한 결과, 콘솔창에 현재시간이 출력된다.




Posted by holland14
: