VSPackage를 사용하여 확장 만들기
이 연습에서는 VSIX 프로젝트를 만들고 VSPackage 프로젝트 항목을 추가하는 방법을 보여 줍니다. 메시지 상자를 표시하기 위해 VSPackage를 사용하여 UI 셸 서비스를 가져옵니다.
VSPackage 만들기
FirstPackage라는 VSIX 프로젝트를 만듭니다. “vsix”를 검색하여 새 프로젝트 대화 상자에서 VSIX 프로젝트 템플릿을 찾을 수 있습니다.
프로젝트가 열리면 FirstPackage라는 Visual Studio 패키지 항목 템플릿을 추가합니다. 솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 추가>새 항목을 선택합니다. 새 항목 추가 대화 상자에서 Visual C#>확장성으로 이동하고 Visual Studio 패키지를 선택합니다. 창 아래쪽의 이름 필드에서 명령 파일 이름을 FirstPackage.cs로 변경합니다.
프로젝트를 빌드하고 디버깅을 시작합니다.
Visual Studio의 실험적 인스턴스가 시작됩니다. 실험적 인스턴스에 대한 자세한 내용은 실험적 인스턴스를 참조하세요.
실험적 인스턴스에서 도구>확장 및 업데이트 창을 엽니다. 여기에 FirstPackage 확장이 표시되어야 합니다. (Visual Studio의 작업 인스턴스에서 확장 및 업데이트를 열면 FirstPackage가 표시되지 않습니다.)
VSPackage 로드
이 시점에서는 확장을 로드하는 원인이 없으므로 확장이 로드되지 않습니다. 일반적으로 UI와 상호 작용할 때(메뉴 명령 클릭, 도구 창 열기) 또는 VSPackage가 특정 UI 컨텍스트에서 로드되도록 지정하여 확장을 로드할 수 있습니다. VSPackage 및 UI 컨텍스트 로드에 대한 자세한 내용은 VSPackage 로드를 참조하세요. 이 절차에서는 솔루션이 열려 있을 때 VSPackage를 로드하는 방법을 보여 줍니다.
FirstPackage.cs 파일을 엽니다.
FirstPackage
클래스의 선언을 찾습니다. 기존 특성을 다음 특성으로 바꿉니다.[PackageRegistration(UseManagedResourcesOnly = true)] [InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)] // Info on this package for Help/About [ProvideAutoLoad(UIContextGuids80.SolutionExists)] [Guid(FirstPackage.PackageGuidString)] public sealed class FirstPackage : Package
VSPackage가 로드되었음을 알리는 메시지를 추가해 봅시다. VSPackage가 배치된 후에만 Visual Studio 서비스를 가져올 수 있으므로 VSPackage의
Initialize()
메서드를 사용하여 이 작업을 수행합니다. (서비스 가져오기에 대한 자세한 내용은 방법: 서비스 가져오기를 참조하세요.)FirstPackage
의Initialize()
메서드를 SVsUIShell 서비스를 가져오고, IVsUIShell 인터페이스를 가져오고, ShowMessageBox 메서드를 호출하는 코드로 바꿉니다.protected override void Initialize() { base.Initialize(); 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}.Initialize()", this.GetType().FullName), string.Empty, 0, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST, OLEMSGICON.OLEMSGICON_INFO, 0, out result)); }
프로젝트를 빌드하고 디버깅을 시작합니다. 실험적 인스턴스가 나타납니다.
실험적 인스턴스에서 프로젝트를 엽니다. First Package Inside Initialize()라는 메시지 상자가 표시됩니다.