연습: VSPackage (파트 1 / 4) 만들기
있는 Vspackage를 만들어 Visual Studio 기능을 추가할 수 있습니다. 소프트웨어 모듈은 VSPackage 이기 때문에 자신의 컴퓨터에 Visual Studio 확장할 수 있습니다 있도록이 다른 사람에 게 배포할 수 있습니다.
Visual Studio 패키지 서식 파일을 사용 하 여 소스 파일 및 있는 Vspackage를 만드는 데 필요한 구성 파일에 이미 있는 프로젝트를 만들 수 있습니다. 프로젝트를 만들 때 프로젝트에 클래스를 정의 하는 파일 이름을 포함 됩니다. 라는 패키지 관리 프레임 워크 (MPF) 클래스에서 파생 된이 클래스는 Package, Visual Studio 있는 VSPackage 어떻게 작동 합니다 결정 하는 속성이 포함 되어 있습니다. 또한 패키지 클래스 초기화 코드와 다른 메뉴 명령 처리기와 같은 코드를 포함합니다. 이 클래스는 Vspackage의 기초입니다.
이 연습에서는 Vspackage를 만들고, 다음과 같은 방법으로 사용자 지정 하는 방법에 설명 합니다.
있는 VSPackage 패키지 템플릿을 사용 하 여 만듭니다.
메뉴 명령 처리기를 구현 합니다.
바로 가기 키를 추가 합니다.
Visual Studio 스플래시 화면에 사용자 지정 정보를 추가 하 여 에 대 한 대화 상자.
이 연습에서는 Visual Studio 통합된 개발 환경 (IDE)을 확장 하는 방법에 설명 하는 일련의 일부입니다. 자세한 내용은 Visual Studio Vspackages를 사용 하 여 사용자 지정 연습를 참조하십시오.
사전 요구 사항
이 연습을 완료 하려면 설치 해야 해당 Visual Studio 2010 SDK.
참고
Visual Studio SDK에 대 한 자세한 내용은 참조 하십시오. Visual Studio 개요를 확장합니다..Visual Studio SDK를 다운로드 하는 방법를 참조 하십시오. Visual Studio 확장성 개발자 센터 MSDN 웹 사이트에서.
Visual Studio 패키지 템플릿에 대 한 템플릿 위치
다음이 위치에서 찾을 수 있습니다 Visual Studio 패키지 서식 파일의 새 프로젝트 대화 상자:
아래에서 Visual Basic 확장성. 프로젝트의 기본 언어는 Visual Basic입니다.
C#에서 확장 합니다. 프로젝트의 기본 언어는 C#입니다.
아래에서 기타 프로젝트 형식 확장성. 프로젝트의 기본 언어는 c + +입니다.
있는 VSPackage 패키지 템플릿을 사용 하 여 만들기
이 섹션에서 Visual Studio VSPackage 솔루션을 만드는 방법을 보여 줍니다.
기본 VSPackage 솔루션을 만들려면
Visual Studio 패키지 프로젝트 템플릿을 사용 하 여 있는 Vspackage를 만듭니다.
시작 페이지에서 클릭 다음.
에 프로그래밍 언어 선택 페이지에서 선택 C# 또는 Visual Basic선택 새 어셈블리에 서명 하려면 키 파일을 생성, 다음을 클릭 하 고 다음.
에 기본 VSPackage 정보 VSPackage 이름 상자에 형식 페이지 FirstPackage, 나머지 기본값을 적용 하 고 있습니다. 회사 이름 및 프로젝트 이름을 패키지에 대 한 네임 스페이스를 만들려면 결합 됩니다.
다음을 클릭합니다.
에 VSPackage 옵션 선택 페이지에서 선택 메뉴 명령을 를 클릭 하 고 다음을 클릭 다음.
에 명령 옵션 페이지에 있는 명령 이름 상자에 입력 첫 번째 명령. (이 텍스트는 메뉴의 Visual Studio 표시 됩니다.) 에 있는 명령 ID 상자에 입력 cmdidFirstCommand. (이 식별자 코드에서 명령을 식별 하도록 사용 됩니다.)
다음을 클릭합니다.
에 테스트 옵션 선택 페이지에서 클릭 완료.
기본 기능이 있는 Visual Studio 프로젝트 서식 파일을 만듭니다. 프로젝트를 빌드하고 디버깅 모드 (Visual Studio 실험적인 빌드도)에서 Visual Studio 다른 인스턴스에서 열립니다 F5 키를 눌러 수 있습니다.
참고
프로젝트를 처음 빌드할 때 Visual Studio 응답을 중지 하도록 나타날 수 있습니다 및 Visual Studio 사용 중입니다 메시지가 표시 될 수 있습니다.메시지를 무시 하 고 Visual Studio 열고 패키지를 로드할 때까지 기다립니다.
실험적인 빌드에 도구 메뉴에서 명명 된 명령을 첫 번째 명령 은 표시 되어야 합니다. 첫 번째 명령에 입력 한 이름입니다 있는 명령 옵션 페이지 서식 파일입니다.
클릭 첫 번째 명령은. 다음과 유사한 메시지가 나타납니다.
메뉴 명령 처리기를 검사합니다.
클릭 하면 표시 되는 메시지 첫 번째 명령 에 있는 도구 메뉴를 제공 하는 메뉴 명령에 대 한 처리기 코드에서. 이 처리기는 FirstPackage.cs 또는 FirstPackage.vb 파일에 있습니다.
메뉴 항목 처리기를 확인 하려면
솔루션 탐색기, FirstPackage.cs 또는 Firstpackage.vb를 엽니다.
FirstPackage 클래스를 찾습니다. FirstPackage 클래스는 다음과 같이 정의 됩니다.
Public NotInheritable Class FirstPackage Inherits Package
public sealed class FirstPackage : Package
MPF에서 파생 되는 클래스를 알 패키지 클래스입니다.
코드에서 MenuItemCallback 메서드를 구현 하는 메뉴 처리기를 찾을. 메뉴 처리기 함수는 일반적인 Windows Forms 이벤트 처리기 메서드가 있습니다.
Private Sub MenuItemCallback(ByVal sender As Object, ByVal e As EventArgs) ' Show a Message Box to prove we were here Dim uiShell As IVsUIShell = TryCast(GetService(GetType(SVsUIShell)), IVsUIShell) Dim clsid As Guid = Guid.Empty Dim result As Integer Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(uiShell.ShowMessageBox(0, clsid, "FirstPackage", String.Format(CultureInfo.CurrentCulture, "Inside {0}.MenuItemCallback()", Me.GetType().Name), String.Empty, 0, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST, OLEMSGICON.OLEMSGICON_INFO, 0, result)) End Sub
private void MenuItemCallback(object sender, EventArgs e) { IVsUIShell uiShell = (IVsUIShell)GetService(typeof(SVsUIShell)); Guid clsid = Guid.Empty; int result; Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure( uiShell.ShowMessageBox( 0, ref clsid, "FirstPackage", string.Format(CultureInfo.CurrentCulture, "Inside {0}.MenuItemCallback()", this.ToString()), string.Empty, 0, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST, OLEMSGICON.OLEMSGICON_INFO, 0, out result)); }
바로 가기 키를 추가합니다.
기본적으로 패키지 템플릿을 통해 만든 메뉴 명령의 바로 가기 키가 필요는 없습니다. 첫 번째 명령에 추가할 수 있습니다.
기본 바로 가기 키를 추가 하려면
솔루션 탐색기에서 first.vsct를 엽니다.
XML 편집기에서 Visual Studio 파일이 열립니다.
표시 되는 명령 요소 끝을 찾는 </Commands> 태그입니다.
다음 줄 사이의 추가 </Commands> 태그와는 <Symbols> 태그.
<KeyBindings> <KeyBinding guid="guidFirstCmdSet" id="cmdidFirstCommand" editor="guidVSStd97" key1="M" mod1="(control shift)"/> </KeyBindings>
이 키 바인딩 요소의 여러 가지 특성을 가집니다. guid 및 id 특성을 결정 하는 명령에 바로 가기 키를 받게 됩니다. Guid VSPackage의 GUID 이며 id는 서식 파일을 실행할 때 입력 된 명령 식별자입니다. 두 심볼 기호 섹션에는 다음과 같이 정의 됩니다.
<Symbols> <GuidSymbol name="guidFirstCmdSet" value="{600efde8-1f5e-4df5-bc22-06074a411975}"> <IDSymbol name="cmdidFirstCommand" value="0x0100" /> </GuidSymbol>
값은 editor 특성에서 바로 가기 키를 사용할 수 있는 컨텍스트를 나타내는 GUID입니다. Visual Studio의 바로 가기 키에 명령 바인딩 특정 windows 수 범위 또는 수 전역 변경 (즉, Visual Studio 모든 위치에서 사용할 수 있는). 예를 들어, 텍스트 편집기에서 CTRL + I 증분 검색 명령을 하지만 실행 될 수 있습니다 솔루션 탐색기, CTRL + I이 키 바인딩이 없습니다. 따라서, CTRL + I만 텍스트 편집기에서 사용할 수 있습니다. 이 연습에서는 키보드 바로 가기가 전역으로 설계 되었습니다. 따라서 편집기 특성의 값입니다 guidVSStd97, 키보드 바로 가기는 전역의 값입니다.
key1 및 mod1 키 및 바로 가기 키를 활성화 하려면 누를 한정자 특성을 설정 합니다. K e y 1의 값에 대 한 키보드의 모든 키는 기호화 된 양식, 예를 들어, "M" 문자를 사용할 수 있습니다 및 "VK_F5" 함수에 대 한 F5 키입니다. Mod1 값 "Alt", "제어", 또는 "조합에서 공백으로 구분 Shift" 될 수 있습니다.
이 연습에서는 k e y 1의 값이 M 및 mod1 값입니다 (Control Shift). 따라서 바로 가기 키 CTRL + SHIFT + M입니다.
디버그 메뉴에서 디버깅하지 않고 시작을 클릭합니다.
실험에서 빌드 Visual Studio 중에 도구 메뉴에서 CTRL + SHIFT + M 표시 옆에 첫 번째 명령은.
CTRL + SHIFT + M 키를 누릅니다. 누를 때 나타나는 동일한 메시지가 나타납니다 첫 번째 명령 은 에 있는 도구 메뉴.
.Vsct 파일에 대 한 자세한 내용은 VSCT XML 스키마 참조.
사용자 지정 정보를 추가 하 여 대화 상자에 대 한
패키지에 대 한 아이콘 및 정보를 포함할 수 있습니다 해당 에 대 한 대화 상자. 이 위해서는 솔루션에 다음과 같이 변경 해야 합니다.
수정에서 InstalledProductRegistrationAttribute 주 VSPackage 클래스에 대 한 인수입니다.
구현에서 IVsInstalledProduct 주 VSPackage 클래스에 대 한 인터페이스입니다.
아이콘 리소스 폴더에 추가 합니다.
VSPackage.resx 파일에 있는 아이콘을 참조 하십시오.
주 VSPackage 클래스 InstalledProductRegistration 특성을 사용 하 여에 대 한 정보를 찾을 수 있는 위치를 지정 하는 에 대 한 대화 상자. 이 연습에서는 기본 클래스, FirstPackage 라고 하는 FirstPackage.cs 또는 Firstpackage.vb를 열어 수정할 수 있습니다.
새 프로젝트 서식 파일은 다음 InstalledProductRegistration 특성을 생성합니다.
<InstalledProductRegistration( false, "#110", "#112", "1.0", IconResourceID := 400)>
[InstalledProductRegistration( false, "#110", "#112", "1.0", IconResourceID = 400)]
리소스 Id "# 110" 및 "# 112" VSPackage.resx 파일에는 다음과 같이 정의 된 문자열 리소스를 참조 하십시오.
Firstpackage를 참조 하는 110
112는 VSPackage 내에 대 한 정보를 참조
IconResourceID 400 VSPackage.resx 파일에는 다음과 같이 정의 된 리소스 폴더에서 Package.ico 파일을 참조 합니다.
<data name="400" type="System.Resources.ResXFileRef,
System.Windows.Forms">
<value>Resources\Package.ico;System.Drawing.Icon, System.Drawing,
Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a
</value>
</data>
사용자 지정 하는 에 대 한 대화 상자에서 첫 번째 인수는 Installedproductregistration의 특성을 변경 true하면 VSPackage IVsInstalledProduct 인터페이스를 통해 적절 한 정보를 제공할 수 있도록.
시작 화면 및 정보 대화 상자에 사용자 지정 정보를 추가 하려면
열기 FirstPackage.cs 또는 Firstpackage.vb에서 InstalledProductRegistration 특성을 찾아 인수를 다음과 같이 변경 합니다.
InstalledProductRegistration(True, Nothing, Nothing, Nothing)
[InstalledProductRegistration(true, null, null, null)]
FirstPackage 클래스는 패키지와 IVsInstalledProduct 모두에서 파생 됩니다.
Public NotInheritable Class FirstPackage Inherits Package Implements IVsInstalledProduct
public sealed class FirstPackage : Package, IVsInstalledProduct
IVsInstalledProduct 인터페이스를 암시적으로 구현 합니다. 이 단계는 C# 및 Visual Basic 대 한 다릅니다.
C#에서 암시적 IVsInstalledProduct 위로 마우스를 가져가면 인터페이스 IVsInstalledProduct. IntelliSense 메뉴가 표시 되 면 첫 번째 항목을 클릭 합니다.
이렇게 다음 스텁 메서드는 FirstPackage 클래스에 추가 합니다. 나중에, 방법으로 채워집니다.
public int IdBmpSplash(out uint pIdBmp) { throw new NotImplementedException(); } public int IdIcoLogoForAboutbox(out uint pIdIco) { throw new NotImplementedException(); } public int OfficialName(out string pbstrName) { throw new NotImplementedException(); } public int ProductDetails(out string pbstrProductDetails) { throw new NotImplementedException(); } public int ProductID(out string pbstrPID) { throw new NotImplementedException(); }
Visual Basic FirstPackage 클래스의 맨 아래에 다음 코드를 추가 합니다. 나중에, 방법으로 채워집니다.
Function ProductDetails( _ <OutAttribute()> ByRef pbstrProductDetails As String) _ As Integer End Function Public Function IdBmpSplash(ByRef pIdBmp As UInteger) As Integer Implements Microsoft.VisualStudio.Shell.Interop.IVsInstalledProduct.IdBmpSplash End Function Public Function IdIcoLogoForAboutbox(ByRef pIdIco As UInteger) As Integer Implements Microsoft.VisualStudio.Shell.Interop.IVsInstalledProduct.IdIcoLogoForAboutbox End Function Public Function OfficialName(ByRef pbstrName As String) As Integer Implements Microsoft.VisualStudio.Shell.Interop.IVsInstalledProduct.OfficialName End Function Public Function ProductID(ByRef pbstrPID As String) As Integer Implements Microsoft.VisualStudio.Shell.Interop.IVsInstalledProduct.ProductID End Function
Icon.ico에서 복사 < Visual Studio SDK 설치 경로가 > \Common7\IDE\NewFileItems 패키지 솔루션의 리소스 폴더에 붙여 넣습니다.
솔루션 탐색기, 리소스 폴더를 마우스 오른쪽 단추로 클릭 하 고 가리킨 추가, 다음을 클릭 하 고 기존 항목. 파일 형식 필터 설정 모든 파일 (*. *) Icon.ico 다음 추가 합니다.
솔루션 탐색기, VSPackage.resx, 마우스 오른쪽 단추로 클릭 하 고 다음을 클릭 와. 선택 XML 편집기 를 클릭 하 고 확인 XML 편집기에서 파일을 열 수 있습니다.
최종 하기 바로 전에 다음 줄을 추가 </root> 태그입니다.
<data name="500" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>Resources\GenericPackage.ico; System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a </value> </data>
이 마크업 Icon.ico ID 500 리소스로 선언합니다.
FirstPackage.cs 또는 Firstpackage.vb에 다음 코드를 사용 하 여 IVsInstalledProduct 인터페이스의 구현을 대체 합니다.
Public Function ProductDetails(ByRef pbstrProductDetails As String) As Integer Implements IVsInstalledProduct.ProductDetails pbstrProductDetails = "This is my package" Return Microsoft.VisualStudio.VSConstants.S_OK End Function Public Function IdBmpSplash(ByRef pIdBmp As UInteger) _ As Integer Implements IVsInstalledProduct.IdBmpSplash Return Microsoft.VisualStudio.VSConstants.S_OK End Function Public Function IdIcoLogoForAboutbox(ByRef pIdIco As UInteger) _ As Integer Implements IVsInstalledProduct.IdIcoLogoForAboutbox pIdIco = 600 Return Microsoft.VisualStudio.VSConstants.S_OK End Function Public Function OfficialName(ByRef pbstrName As String) _ As Integer Implements IVsInstalledProduct.OfficialName pbstrName = "My Package" Return Microsoft.VisualStudio.VSConstants.S_OK End Function Public Function ProductID(ByRef pbstrPID As String) _ As Integer Implements IVsInstalledProduct.ProductID pbstrPID = "My Package ID" Return Microsoft.VisualStudio.VSConstants.S_OK End Function
public int IdBmpSplash(out uint pIdBmp) { return Microsoft.VisualStudio.VSConstants.S_OK; } public int IdIcoLogoForAboutbox(out uint pIdIco) { pIdIco = 500; return Microsoft.VisualStudio.VSConstants.S_OK; } public int OfficialName(out string pbstrName) { pbstrName = "My Package"; return Microsoft.VisualStudio.VSConstants.S_OK; } public int ProductDetails(out string pbstrProductDetails) { pbstrProductDetails = "This is my package"; return Microsoft.VisualStudio.VSConstants.S_OK; } public int ProductID(out string pbstrPID) { pbstrPID = "My Package ID"; return Microsoft.VisualStudio.VSConstants.S_OK; }
두 번째 방법은 아이콘의 리소스 ID를 반환합니다. 표시 됩니다 수 있도록 나머지 세 함수 이름, 제품 정보, 제품 ID, 반환은 에 대 한 대화 상자.
다음 절차를 완료 하 여 변경 내용을 테스트할 수 있습니다.
시작 화면 및 정보 대화 상자의 사용자 지정 테스트
솔루션 탐색기, 첫 번째 프로젝트 노드를 마우스 오른쪽 단추로 클릭 하 고 다음을 클릭 속성이. 응용 프로그램 디자이너를 표시 합니다.
클릭 디버그. 디버그 옵션 창이 나타납니다.
에 명령줄 인수 상자에서 추가 /splash 전환 합니다.
F5 키를 눌러 실험적인 빌드에서 Visual Studio 엽니다.
에 도움말 메뉴를 클릭 에 대 한 Microsoft Visual Studio.
에 대 한 대화 상자가 표시 되 고 아이콘 및 텍스트를 Vspackage를 표시 합니다.
새로운 기능
솔루션 탐색기 및 작업 목록 예의 도구 창입니다. 연습: 도구 창 (파트 2 / 4) 만들기, Visual Studio 도킹 하 여 음악 파일을 재생할 수 있습니다 도구 창을 만들 수 있습니다.