Microsoft MVP성태의 닷넷 이야기
VS.NET IDE: 77. Visual Studio 확장(VSIX) 만드는 방법 [링크 복사], [링크+제목 복사]
조회: 14138
글쓴 사람
정성태 (kevin13@chol.net)
홈페이지
첨부 파일
 

Visual Studio 확장(VSIX) 만드는 방법

요즘들어 Visual Studio에서 "Tools" / "Extensions and Updates..." 메뉴를 종종 이용하게 됩니다. 그만큼 이젠 확장 애드인들이 풍부해졌다는 이야기가 되는데요.

때로는 ^^ 여기에 자신이 만든 확장 도구를 배포하고 싶은 마음이 들 수 있는데요. 오늘은 이 방법에 대해서 알아보겠습니다.

우선, Visual Studio 확장을 만들기 위해서는 Visual Studio SDK가 있어야 합니다. 아래는 각 버전에 해당하는 것이니 그에 맞게 다운로드 해서 설치합니다. (물론 2개다 하셔도 됩니다.)

Microsoft Visual Studio 2012 SDK
; http://www.microsoft.com/en-us/download/details.aspx?id=30668

Microsoft Visual Studio 2013 SDK 
; http://www.microsoft.com/en-sa/download/details.aspx?id=40758

용량은 각각 100MB 정도하기 때문에 모두 설치해도 크게 부담은 없는 수준입니다.

이렇게 SDK를 설치하고 나면 새 프로젝트에 "Visual Studio Package"가 제공되고,

how_to_vsix_1.png

이를 선택하면 몇 가지 간단한 것들을 물어보는데, 그 중에서 3번째 단계가 의미있습니다.

how_to_vsix_2.png

이번 실습에서는 Visual Studio의 메뉴에 항목을 추가할 것이므로 "Menu Command"만 선택했지만, 여러분들이 만들려는 확장이 있다면 그에 맞게 선택해 주시면 됩니다. 이후에 메뉴 이름을 정하는 대화창이 진행되는데 제 경우에는 "AttachDebug"라는 이름을 선택했습니다.

일단 프로젝트가 생성되면 곧바로 F5 키를 눌러 디버깅을 시작하는 경우, 새롭게 Visual Studio가 뜨게 되고 다음과 같이 "TOOLS" 메뉴에서 우리가 만든 메뉴가 추가된 것을 볼 수 있습니다.

how_to_vsix_3.png

메뉴가 선택된 경우 원하는 동작을 하고 싶다면 MenuItemCallback 메서드에 코드를 채워넣으면 됩니다.

how_to_vsix_4.png




일반적으로 Visual Studio 확장을 제작하는 경우 대부분 EnvDTE 객체가 필요합니다. 기존의 Visual Studio Add-in 프로젝트에서는 이 값이 클래스 멤버로 제공되지만 VSIX 프로젝트에서는 직접 구해줘야 합니다.

private DTE2 _applicationObject;

protected override void Initialize()
{
    base.Initialize();

    _applicationObject = (EnvDTE80.DTE2)this.GetService(typeof(EnvDTE.DTE));

    // ... 생략 ...
}

자, 그럼 이렇게 해서 원하는 기능을 구현한 후 빌드를 하면 exe 대신 vsix 확장자를 가진 파일이 생성됩니다. (vsix 파일은 zip 압축 형식입니다.)

vsix 내부에는 빌드한 바이너리와 manifest 관련 정보를 포함하고 있기 때문에 그것 자체가 배포 단위로 동작합니다. 따라서 Visual Studio가 설치된 PC에서 vsix 파일을 더블클릭하면 Visual Studio에 의해 자동으로 설치됩니다.

"Tools" / "Extensions and Updates..." 메뉴를 실행해 보면 다음과 같이 설치 유무와 "Disable", "Uninstall"까지 할 수 있습니다

how_to_vsix_5.png




잘 만들어진 도구를 자랑하고 싶다거나 ^^ 판매를 하고 싶다면 어떻게 해야 할까요? 간단합니다. 다음의 사이트를 방문해서,

Visual Studio 제품 및 확장 기능
; http://visualstudiogallery.msdn.microsoft.com/

"등록하기" 메뉴를 이용해 자신이 제작한 VSIX 파일을 업로드하면 전 세계의 Visual Studio 개발자들이 이용할 수 있게 됩니다.

how_to_vsix_6.png

참고로, Visual Studio Package를 만드는 공식 문서는 다음에서 제공됩니다. ^^

Walkthroughs for Customizing Visual Studio By Using VSPackages
; http://msdn.microsoft.com/en-us/library/vstudio/cc138565.aspx




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]





[최초 등록일: ]
[최종 수정일: 10/25/2013 ]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:kevin13@chol.com

비밀번호

댓글 쓴 사람
 



2013-11-05 03시22분
vsix가 설치되면 "C:\Users\[계정명]\AppData\Local\Microsoft\VisualStudio\12.0\Extensions" 경로에 파일이 풀립니다.


정성태
2015-10-05 12시26분
Microsoft/ConcordExtensibilitySamples
; https://github.com/Microsoft/ConcordExtensibilitySamples/wiki
정성태
2018-10-12 10시44분
%LOCALAPPDATA%\Microsoft\VisualStudio\15.0_2502db9e\Extensions
정성태

[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
11817정성태2/17/201922오류 유형: 514. WinDbg Preview 실행 오류 - Error : DbgX.dll : WindowsDebugger.WindowsDebuggerException: Could not load dbgeng.dll
11816정성태2/17/201951Windows: 157. 윈도우 스토어 앱(Microsoft Store App)을 명령행에서 직접 실행하는 방법
11815정성태2/14/201939오류 유형: 513. Visual Studio 2019 - VSIX 설치 시 "The extension cannot be installed to this product due to prerequisites that cannot be resolved." 오류 발생
11814정성태2/12/201993오류 유형: 512. VM(가상 머신)의 NT 서비스들이 자동 시작되지 않는 문제
11813정성태2/12/2019119.NET Framework: 809. C# - ("Save File Dialog" 등의) 대화 창에 확장 속성을 보이는 방법
11812정성태2/11/201974오류 유형: 511. Windows Server 2003 VM 부팅 후 로그인 시점에 0xC0000005 BSOD 발생
11811정성태2/11/201984오류 유형: 510. 서버 운영체제에 NVIDIA GeForce Experience 실행 시 wlanapi.dll 누락 문제
11810정성태2/11/201977.NET Framework: 808. .NET Profiler - GAC 모듈에서 GAC 비-등록 모듈을 참조하는 경우의 문제
11809정성태2/11/201993.NET Framework: 807. ClrMD를 이용해 메모리 덤프 파일로부터 특정 인스턴스를 참조하고 있는 소유자 확인
11808정성태2/8/2019342디버깅 기술: 123. windbg - 닷넷 응용 프로그램의 메모리 누수 분석
11807정성태1/29/2019198Windows: 156. 가상 디스크의 용량을 복구 파티션으로 인해 늘리지 못하는 경우
11806정성태1/29/2019195디버깅 기술: 122. windbg - 덤프 파일로부터 PID와 환경 변수 등의 정보를 구하는 방법
11805정성태1/28/2019530.NET Framework: 806. C# - int []와 object []의 차이로 이해하는 제네릭의 필요성 [2]파일 다운로드1
11804정성태1/24/2019188Windows: 155. diskpart - remove letter 이후 재부팅 시 다시 드라이브 문자가 할당되는 경우
11803정성태1/10/2019404디버깅 기술: 121. windbg - 닷넷 Finalizer 스레드가 멈춰있는 현상
11802정성태1/7/2019513.NET Framework: 805. 두 개의 윈도우를 각각 실행하는 방법(Windows Forms, WPF)파일 다운로드1
11801정성태1/1/2019525개발 환경 구성: 427. Netsh의 네트워크 모니터링 기능 [1]
11800정성태12/28/2018346오류 유형: 509. WCF 호출 오류 메시지 - System.ServiceModel.CommunicationException: Internal Server Error
11799정성태12/19/2018619.NET Framework: 804. WPF(또는 WinForm)에서 UWP UI 구성 요소 사용하는 방법 [2]파일 다운로드1
11798정성태12/19/2018824개발 환경 구성: 426. vcpkg - "Building vcpkg.exe failed. Please ensure you have installed Visual Studio with the Desktop C++ workload and the Windows SDK for Desktop C++"
11797정성태12/19/2018362개발 환경 구성: 425. vcpkg - CMake Error: Problem with archive_write_header(): Can't create '' 빌드 오류
11796정성태12/19/2018383개발 환경 구성: 424. vcpkg - "File does not have expected hash" 오류를 무시하는 방법
11795정성태12/19/2018405Windows: 154. PowerShell - Zone 별로 DNS 레코드 유형 정보 조회
11794정성태12/17/2018395오류 유형: 508. Get-AzureWebsite : Request to a downlevel service failed.
11793정성태12/16/2018505개발 환경 구성: 423. NuGet 패키지 제작 - Native와 Managed DLL을 분리하는 방법
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...