2009/02/11 23:47

Visual Studio추가기능(Add-In) 만들기 - Part1

저도 추가기능은 제대로된걸 만들어본적이 없어서 깊게 파고 들수는 없지만 대략적인 지식을 비망록으로써 남겨보려합니다.
Visual Studio에는 3가지 방법으로 개발환경을 커스터마이징할수 있습니다.

매크로
   매크로는 흔히 이용하는 오피스의 매크로와 동일하다고 보시면 됩니다.
   사용자의 액션을 레코딩하여 반복작업을 간단하게 해줄수도 있고 컴파일이 필요없기 때문에 쉽게 편집할수도 있습니다.
   다만 Visual Basic으로만 저장이 가능하고 소스코드가 그대로 저장되어서 배포할때도 소스코드가 배포되니
   통합된 프로젝트에서는 관리하기가 불편하죠.

Add-In
   하나의 어플리케이션형태로 개발되고 배포또한 인스톨러형식으로 배포가능하고 매크로보다 강력합니다.
   매크로는 사용자의 명령을 소스코드가 대신해주는 기능뿐이지만 Add-In은 하나의 어플리케이션처럼
   VS랑 상호작용하니 가능한 작업도 많아집니다.
   
Visual Studio SDK
   이건 저도 사용해본적이 없어서 많은 설명을 드릴수는 없지만 Visual Studio SDK를 사용하면
   VS를 근본부터 제어할수 있습니다. DevParter라든지 각종 서드파티의 개발지원툴들은 이것을 이용하여 개발되었다고
   보시면 됩니다.WF나 WCF의 디자이너또한 마찬가지이고요..
  

3파트 정도로 나뉘어서 간단하게 툴바에 버튼을 하나 추가하여 버튼을 누르면 소스코드에 코멘트를
자동으로 입력해주는 기능을 만들어보도록 하겠습니다.

일단 오늘은 VS가 제공하는 템플릿을 사용하여 기본틀만 만들어보죠.

1. 새 프로젝트를 클릭하셔서 "기타 프로젝트형식" -> "확장성" -> "Visual Studio 추가기능" 순으로 클릭해주세요.
그리고 적당한 이름을 넣으시고 "확인을 눌러주세요.
참고로 옆에 보이는 "공유추가기능"이란건 오피스등에서 사용할수 있는 추가기능을 말합니다.


2. 그럼 위저드가 실행되어 언어를 선택하는 화면이 나옵니다.여기서는 C#을 선택합니다.


3. 그후에는 어떤 형식으로 추가기능을 사용할건지가 나오는데요. Macros를 제외한걸 선택합니다.
(실은 Macros를 선택한것과 안한것이 머가 틀린지는 저도 모르겠습니다...-.-..다만 추가기능의 정의XML에 호스팅되는 환경으로 매크로가 추가될뿐...)



4.그리고 이름과 설명을 대충입력해주시고요...



5. 아래와 같이 체크복스를 체크합니다.
가볍게 설명을 하자면 "도구"메뉴항목을 만듭니다..라는 내용은 VS상단메뉴의 "도구"에 지금 만드는 추가기능의
기본명령을 추가해주는 소스코드를 자동으로 만들어줍니다.
다음으로 호스트 응용프로그램이 시작될때 로드합니다.라는 내용은 추가기능의 정의XML에 옵션설정을 해주어서
별도의 유저액션없이 추가기능을 로드해줍니다.
마지막의 모달UI를 표시하지 않으며...라는 내용은 MSDN에는 추가 기능에 모달 UI(사용자 인터페이스)를 사용하지 않도록 하여 명령줄 빌드에서 안전하게 사용할 수 있도록 할지 여부라고 나오는데 당췌 먼말인지 모르겠습니다..-.-

6. 상단 메뉴의 "도움말" -> "Visual Studio 정보"라는 메뉴를 클릭했을때 나오는 일반적은 정보화면에 추가기능의 정보를 표시할지를 선택합니다. 대충 입력하시고 다음을 눌러주세요..




7. 그럼 프로젝트가 작성되어지고 다음의 소스코드들이 들어가 있을겁니다.


이걸로 템플릿을 사용하여 아무것도 없는 소스코드까지만 만들었습니다.
하지만 다음 내용을 위해 하나 해둬야 할게 있습니다.
현재 Connect는 IDTExtensibility2라는 인터페이스만을 구현하고 있는데 이건 추가기능으로써 필요한 인터페이스입니다.
저희는 도구모음을 버튼을 추가해야하니 IDTCommandTarget라는 인터페이스도 구현해야합니다.
IDTCommandTarget라는 텍스트를 추가하시고 아래그림과 같이 메서드스터브를 자동으로 만들어 주세요.
IDTExtensibility2과 IDTCommandTarget에 대한 설명을 다음 내용에서 설명하도록 하겠습니다.
Trackback 0 Comment 0