기본 콘텐츠로 건너뛰기

라벨이 Commands인 게시물 표시

[VSIX] Visual Studio 확장에 대해서... #5 Events and Commands

Events and Commands 이전 게시글 에서 Wizard를 활용하는 방법을 정리해 보았다. 이번에는 추가된 INI 파일을 변경하고 저장하는 시점을 알아내서 관련된 처리를 수행할 수 있도록 처리하는 방법을 정리해 보도록 한다. 이 과정에서 필요한 것들이 Visual Stuidio에서 발생하는 이벤트들을 처리하는 것이며, 관련된 처리를 하기 위해서 Commands 를 호출하는 방법에 대해서 검토하게 된다. Visual Studio Events 가장 먼저 처리해야 하는 부분이 DTE 와 Events 에 관련된 부분을 패키지에서 설정하는 부분이다. 아래의 그림과 같이 패키지 클래스에 관련된 정보를 설정할 수 있도록 코드를 구성한다. 1: private DTE dte; 2: private Events dteEvents; 3: private DocumentEvents documentEvents; 4:   5: private void setupEvents() { 6: this .dte = (DTE) this .GetService( typeof (SDTE)); 7: this .dteEvents = this .dte.Events; 8: this .documentEvents = this .dteEvents.DocumentEvents; 9: this .documentEvents.DocumentSaved += onDocumentSaved; 10: } 위의 코드에서 확인할 수 있는 것처럼 많은 이벤트들이 제공되지만, 그 중에서도 INI 파일이 저장되는 경우에 처리를 수행할 것이기 때문에 “DocumentSaved” 이벤트를 사용하도록 한다. 이 이벤트에 전달되는 파라미터는 “Document” 로 내용이 수정된 문서 개체이다. 이 문서가 *.tini 파일인 경우에 한해서 자식으로 연결되어 있는 *.cs 파일을 찾아서 필요한 처리를 지정한다.

[VSIX] Visual Studio 확장에 대해서... #4 Wizard 추가

Add a wizard on template 이전 게시글 에서 메뉴와 명령 처리를 설정해서 검증하였다. 이번에는 INI 파일을 단순히 추가하던 기능에 추가하는 과정에서 Culture 정보를 선택할 수 있는 화면을 제공하고 이 화면에서 선택된 Culture를 추가된 파일에 적용하는 구성을 알아보도록 한다. 즉, 쉽게 이야기를 하면 기존 템플릿 처리는 Visual Studio의 내장 마법사를 통해서 처리를 했지만, 이번에는 사용자 정의 마법사 (Custom Wizard)를 구동시켜서 템플릿에 추가적인 정보를 제공할 수 있도록 한다는 것이다. Add a library project Wizard 는 Visual Studio 에서 호출이 되기 때문에 관련된 정보가 vstemplate 파일에 지정되어야 한다. 따라서 별도의 클래스 라이브러리 프로젝트를 추가하여 작업을 하도록 한다. 프로젝트 생성은 따로 설명을 하지 않고 순차적인 처리를 정리해 놓도록 한다. FDTWorksTool.Library 라는 이름의 클래스 라이브러리 프로젝트 (나중에 WPF UI 를 추가할 것이다) 를 생성한다. 자동으로 생성된 클래스 파일은 지운다. 프로젝트를 선택하고 "기존 항목 추가"를 선택하여 서명할 키 파일을 앞에서 생성했던 FDTWorksTool 패키지 프로젝트 경로를 이동하여 "*.snk" 파일을 링크로 추가한다. 프로젝트 속성 창을 열고 "서명" 섹션에서 방금 등록한 snk 파일을 지정하도록 한다. 참조에 "Microsoft.VisualStudio.TemplateWizardInterface" 어셈블리를 추가한다. 아래의 그림은 생성된 클래스 라이브러리 프로젝트를 보여주고 있다. Modify package project 패키지 프로젝트에서는 Wizard를 사용할 수 있도록 위에서 만든 Library 를 추가해 주어야 한다. 참조에 Library Projec

[VSIX] Visual Studio 확장에 대해서... #3 Command 추가

이전 글 에서 단순한 설정 파일을 추가하는 ItemTemplate 프로젝트를 구성해 보았다. 이번에는 이와 연관되어 INI 파일을 처리할 수 있도록 MENU 를 추가하고 MENU에 따른 Command 를 구성해 보도록 한다. Add a simple command with menu Command 를 추가하기 위해서는 Visual Studio와 연계할 수 있는 Command ID를 설정하는 작업을 처리하여야 한다. 패키지 프로젝트를 선택하고 "PkgCmdID.cs" 라는 이름의 클래스 파일을 추가하고 내부의 내용을 아래의 그림과 같이 설정하도록 한다. 클래스의 이름은 PkgCmdIDList 라고 지정한다. 그리고 패키지 클래스 (예제에서는 FDTWorksToolPackage.cs) 에 아래와 같이 특성을 지정해 준다. 위의 특성은 다음과 같은 의미를 가지고 있다. ProvideMenuResource - 이 패키지가 어떤 메뉴 리소스로 표현될 것인지를 Shell에서 알려주는 역할을 담당한다. ProvideAutoLoad - 패키지가 솔루션이 존재하고 모두 완전히 로드된 후에 로드되어야 한다는 것을 알려주는 역할을 담당한다. 이제 Menu 와 Command 를 연결하기 위한 파일을 또 하나 추가하여야 한다. 파일의 이름은 패키지 이름을 사용하여 "FDTWorksTool.vsct" 라고 추가하도록 한다. 그리고 아래의 그림과 같이 기본적인 구성을 하도록 한다. 이제 솔루션을 닫고 일반 텍스트 에디터에서 패키지 프로젝트 파일 (FDTWorksTool.csproj) 을 열고 위에서 추가한 FDTWorksTool.vsct 파일을 지정하고 있는 <ItemGroup> 요소를 찾으면 아래의 그림과 같이 설정되어 있는 것을 확인할 수 있다. 위의 구조를 아래의 구조와 같이 변경하도록 한다. 위의 구성은 다음과 같은 의미를 갖는다. VSCTCompil

[VSIX] Visual Studio 확장에 대해서... #2 템플릿 추가

이전 게시글 에서 생성한 패키지를 활용하기 위한 첫 번째 기능으로 INI 파일을 추가할 수 있는 Item Template Project를 추가해 보도록 한다. Item Template 활용 Create Item Template Project 패키지 솔루션을 선택하고 "새 프로젝트 추가" 를 통해서 아래의 그림과 같이 C# Item Template Project를 추가하도록 한다. 프로젝트 이름은 "INIParserTemplate" 이라고 지정하고 "확인" 버튼을 누르면 패키지 솔루션에 "C# Item Template" 처리용 프로젝트가 생긴 것을 확인할 수 있다. Add Template file and class 생성된 INIParserTemplate 프로젝트를 선택하고 "새 항목 추가" 를 통해서 "iniTemplate.tini" 라는 이름으로 텍스트 파일을 생성한다. 그리고 추가된 템플릿용 파일의 내용은 아래와 같이 설정하도록 한다. [INISetup] Locale=ko-KR 이제 템플릿 파일을 처리하기 위해서 기본으로 생성되어 있던 "Class1.cs" 파일을 "iniTemplate.cs" 라는 이름으로 변경하고 클래스 파일의 속성을 아래의 그림과 같은지 확인하도록 한다. 이제 추가한 파일들이 동작할 수 있으려면 *.vstemplate 파일을 통해서 항목 추가 작업에서 사용할 템플릿을 연결해 주어야 한다. 아래의 그림과 같이 해당 파일을 수정해 주도록 한다. 위의 설정 내용의 기능은 다음과 같이 이해하면 된다. ReplaceParameters - 템플릿 파일 내에서 사용할 수 있는 템플릿 처리 파라미터를 사용한다는 의미로 Item Template이 처리될 때 Visual Studio로 부터 템플릿 파일에 보내지는 키/값 쌍의 사전 개체를 통해서 값을