기본 콘텐츠로 건너뛰기

[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로 부터 템플릿 파일에 보내지는 키/값 쌍의 사전 개체를 통해서 값을

[VSIX] Visual Studio 확장에 대해서... #1 프로젝트 생성

만들려고 하는 나만의 프레임워크를 운영하기 위한 필수적인 지식이기 때문에 아주 기초적인 부분부터 하나씩 정리를 하고 구체화시키기 위한 진입점으로 삼기로 한다. 이번에 정리할 내용은 다음과 같은 상황들을 다루게 된다. Visual Studio Extension 프로젝트 생성 템플릿 추가와 템플릿을 사용하기 위한 Wizard 구성 Visual Studio 확장을 위한 Event 와 Command 연결 사용자 정의 편집기 추가 Visual Studio Extension Solution 만들기 우선 Visual Studio 를 확장하기 위해서는 반드시 Visual Studio SDK 가 필요하므로 여기서 다운로드하여 설치를 하도록 한다. (참고로 자신의 Visual Studio 버전에 맞게 설치하면 된다) Create Package Solution Visual Studio를 실행하고 "새 프로젝트" 를 선택하고 아래의 그림과 같이 "Visual Studio Package" 프로젝트를 선택하도록 한다. 프로젝트의 이름과 경로는 자신에 맞도록 설정을 한다. VSIX 프로젝트 형식이 있지만 여러 가지를 통합해서 처리하는데는 Package를 사용하는 것이 더 효율적(?)인 것 같아서 Package를 생성하도록 한다. "확인" 버튼을 누르면 다음과 같이 순차적으로 패키지 구성 마법사가 나타난다. "Next" 버튼을 누르면 다음과 같이 언어 선택 부분이 나타난다. C# 언어를 선택하고 서명 키는 새로 생성하는 것으로 선택한 후에 "Next" 버튼을 누르면 Package 정보를 설정하는 부분이 나타난다. 패키지 정보를 입력하고 "Next" 버튼을 누르면 패키지 옵션을 설정하는 부분이 나타난다. 이 부분은 하나씩 추가할 것이기 때문에 모두 선택하지 않는 상태로 놔두도록 한다

[T4 TextTemplating] Compile 중에 Linq 를 찾을 수 없다는 오류

T4 TextTemplating Engine에서 ProcessTemplate 메서드를 실행하면 다음과 같은 오류가 발생하는 경우가 있다. "The type or namespace name 'Linq' does not exist in the namespace 'System' - are you missing and assembly reference? 오류 메시지에 표현된 것과 같이 컴파일을 하려고 하는데, Linq 네임스페이스를 찾을 수 없다는 문제다. 이론적으로는 System.Core.dll 의 참조가 필요한데, 참조가 되지 않았거나 다른 버전의 System 네임스페이스가 사용되고 있을 경우를 의심해 볼 필요가 있다. 당연히 T4 Template 파일에는 아래와 같이 관련된 어셈블리를 지정해 주었다. <#@ assembly name="System.Core" #> 여러 가지 경우의 수와 TextTemplating Engine의 구성을 확인해 보던 중에 Custom Template Engine Host 에 문제가 있는 것을 확인할 수 있었다. ITextTemplatingEngineHost 라는 것은 "처리 대상이 되는 텍스트 템플릿" 을 입력으로 받아서 처리된 텍스트 파일을 출력으로 반환하는 역할을 담당하는 것이다. 기본으로 제공되는 것은 "TextTemplatingFileGenerator" 다. 실제 구현한 Host에서 어셈블리 참조들을 아래의 코드와 같이 구성을 했었다. public IList<string> StandardAssemblyReferences { get { return new string[] { typeof(System.Uri).Assembly.Location , typeof(WizardDataObject).Assembly.Location, typeof(FrameworkContext).Asse

[Tips] Visual Studio 에서 특정 어셈블리의 PublicKeyToken 찾는 법

막상 Visual Studio로 개발을 하다보면 Configuration이나 VSTemplate의 Wizard 등에 어셈블리의 FullName을 명시해야 하는 경우가 있다.  이런 경우에 Namespace와 Assembly Name은 정보가 속성들을 보고 대략 유추가 가능한데, 정작 서명된 어셈블리에 대한 PublicKeyToken 정보는 찾을 수 없다. 따라서 간단하게 Visual Studio 상에서 PublicKeyToken을 찾는 방법을 정리해 둔다. [ VS 에서 PublicKeyToken 정보 찾기 ] 1. Visual Studio의 "도구" 메뉴에서 "외부 도구" 를 선택한다. 2. "외부 도구" 창에서 "추가"를 한다.     2.1 제목을 "Find PublicKeyToken" 으로 설정한다.     2.2 명령을 " C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe" 로 설정한다.     2.3. 인수를 "-Tp $(TargetPath)" 로 설정한다.     2.4. "출력 창 사용" 항목을 Check 한다. 상기와 같이 설정을 처리하고 솔루션 탐색기에서 프로젝트를 선택하고 "도구" -> "Find PublicKeyToken" 메뉴를 클릭하면 "출력 창" 에 해당 어셈블리에서 대한 Key 정보를 볼 수 있다. [ VS 에서 어셈블리 FullName 찾기 ] 1. "Alt + Ctrl + i " 키를 눌러서 "직접 실행 창"을 연다. 2. 실행 창에 "?System.Reflection.Assembly.LoadFile(@"어셈블리 경로").FullName 을 실행

[Tips] Windows 8.1 Embedded Industry ActiveX 해결방법.

항상 OS를 설치하고 다이어트(?) 시키느라 고생도 많이 했는데, 나름 가볍다는 Embedded Version 을 설치해볼까? 하고 망설이면서도 유독 우리나라에서만 고집하고 있는 ActiveX 문제로 사용을 하지 못하고 있었다. 최근에 아래 사이트에서 이를 해결하는 방법을 찾았다고 올라온 글이 있어서 정리해 둔다. 참고 사이트 :  http://www.clien.net/cs2/bbs/board.php?bo_table=lecture&wr_id=204355 일단 문제가 없을지 플젝 끝나면 테스트해 볼 필요가 있을 듯...

[.NET] Configuration 암/복호화

.NET 2.0 이상부터는 ConfigurationSettings 가 아닌 ConfigurationManager 를 사용하게 된다. 그럼 ConfigurationManager의 특징들에 대해 정리해 놓도록 하자. AppSettings, ConnectionStrings 속성을 제공하기 때문에 바로 접근이 가능하다. 다른 섹션을 액세스하기 위해 GetSection 메서드를 사용하고, 다른 컴퓨터에 대한 모든 수준의 설정을 로컬 및 원격으로 읽고 쓰기가 가능하다. 설정에 대해서 다양한 작업을 지원한다. (SectionInformation, PropertyInformation, PropertyInformationCollection, ElementInformation, ContextInformation, ConfigurationSectionGroup, ConfigurationSectionGroupCollection, ...) RefreshSection 메서드를 이용해서 특정 Section 정보를 다시 읽을 수 있으며, Configuration 파일의 내용을 갱신할 수도 있다. (단, 주의할 부분은 Configuration 정보들이 읽기 전용이므로 Add 등의 작업은 불가능하며, 수정되는 경우도 machine.config 가 대상이 될 수 있으므로 특정한 파일을 처리하여야 하는 경우는 OpenExeConfiguration, OpenMachineConfigufation, OpenMappedExeConfiguration, OpenMappedMachineConfiguration, ... 등의 메서드를 이용해서 Configuration을 구성하고 처리하여야 한다) 위의 수정(저장) 기능은 다음과 같이 처리가 가능하다. ... string connStr = "server=(local);database=northwind;Integrated Security=SSPI;"; // open configuration file Con