연습: 언어 서비스 (패키지 관리 프레임 워크) 만들기
패키지 관리 프레임 워크 (MPF) 언어 클래스를 사용 하 여 언어 서비스에서 구현 하 Visual C# 은 간단 합니다. 언어 서비스, 언어 서비스, 사용 중인 언어에 대 한 파서를 호스트 하는 VSPackage 필요 합니다.
사전 요구 사항
이 연습을 완료 하려면 설치 해야 해당 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 만들기
새 VSPackage Visual Studio 패키지 프로젝트 서식 파일을 만듭니다.
언어 서비스는 기존 Vspackage를 추가 하는 경우 다음 단계를 생략 하 고 "언어 서비스 클래스 만들기" 절차로 직접 이동 합니다.
MyLanguagePackage 프로젝트의 이름을 입력 하 고을 클릭 확인.
원하는 이름을 사용할 수 있습니다. 여기에서 설명 하는 이러한 프로시저를 이름으로 Mylanguagepackage를 가정 합니다.
선택 Visual C# 언어, 새 키 파일을 생성 하는 옵션입니다. 다음을 클릭합니다.
해당 회사 및 패키지 정보를 입력 합니다. 다음을 클릭합니다.
선택 메뉴 명령을. 다음을 클릭합니다.
코드 조각을 지원 하지 않을 경우 바로 마침을 클릭 하 고 단계를 무시 수 있습니다.
조각 삽입으로 입력은 명령 이름 및 cmdidInsertSnippet 에 명령 ID. 마침을 클릭합니다.
명령 이름 및 명령 ID 를 원하는 수 있습니다, 이러한 예제 일 뿐입니다.
언어 서비스 클래스 만들기
솔루션 탐색기에서 MyLanguagePackage 프로젝트를 마우스 오른쪽 단추로 클릭 하 고 선택 참조 추가.
에 참조 추가 선택 대화 상자 Microsoft.VisualStudio.Package.LanguageService 에 있는 .NET 탭을 다음 클릭 확인.
이 패키지 언어 프로젝트에 대해 한 번만 수행 해야 합니다.
솔루션 탐색기에서 VSPackage 프로젝트를 마우스 오른쪽 단추로 클릭 하 고 선택 추가 -> 클래스.
있는지 확인 하십시오 클래스 템플릿 목록에서을 선택 합니다.
Mylanguageservice.cs에 대 한 클래스 파일의 이름을 입력 하 고 클릭 추가.
원하는 이름을 사용할 수 있습니다. 여기에서 설명 하는 이러한 프로시저를 가정 MyLanguageService 의 이름입니다.
MyLanguageService.cs 파일에 다음을 추가 using 문입니다.
Imports Microsoft.VisualStudio Imports Microsoft.VisualStudio.Package Imports Microsoft.VisualStudio.TextManager.Interop Imports Microsoft.VisualStudio.OLE.Interop
using Microsoft.VisualStudio; using Microsoft.VisualStudio.Package; using Microsoft.VisualStudio.TextManager.Interop; using Microsoft.VisualStudio.OLE.Interop;
수정에 MyLanguageService 에서 파생 하는 클래스는 LanguageService 클래스:
Friend Class MyLanguageService Inherits LanguageService
class MyLanguageService : LanguageService
"LanguageService"를 하 고 캐럿 위치를 편집 -> IntelliSense 메뉴에서 추상 클래스 구현. 언어 서비스 클래스를 구현 하는 최소 필요한 메서드를 추가 합니다.
에 설명 된 대로 추상 메서드를 구현 합니다. 언어 서비스 (패키지 관리 프레임 워크)를 구현합니다..
언어 서비스를 등록 합니다.
MyLanguagePackagePackage.cs 파일을 열고 다음 추가 using 문의 하십시오.
Imports Microsoft.VisualStudio Imports Microsoft.VisualStudio.Package Imports Microsoft.VisualStudio.TextManager.Interop
using Microsoft.VisualStudio; using Microsoft.VisualStudio.Package; using Microsoft.VisualStudio.TextManager.Interop;
에 설명 된 대로 언어 서비스 클래스 등록 언어 서비스 (패키지 관리 프레임 워크)를 등록 하는 중. 여기에 ProvideXX 특성 및 Proffering "언어 서비스 확인" 섹션. MyLanguageService Testlanguageservice이이 항목을 사용 하 여 위치를 사용 합니다.
파서 및 검색 프로그램
파서 및 검색 프로그램 언어에 설명 된 대로 구현 언어 서비스 파서 및 검색 프로그램 (관리 되는 패키지 프레임 워크).
파서 및 검색 프로그램 구현 하는 방법을 전적으로 사용자 이며이 항목에서 다루지 않습니다.
언어 서비스 기능
언어 서비스에서 각 기능을 구현 하려면 일반적으로 적절 한 MPF 언어 서비스 클래스에서 클래스를 파생 시키는, 모든 추상 메서드 필요에 따라 구현 하 고 적절 한 메서드를 재정의 합니다. 어떤 클래스 만들기 및 파생 기능에 종속 된 지원 하려는. 이러한 기능을 자세히 설명 언어 서비스 기능 (패키지 관리 프레임 워크). 다음은 일반적인 방법은 MPF 클래스에서 클래스를 파생 시키는 수입니다.
MPF 클래스에서 파생
에 있는 솔루션 탐색기VSPackage 프로젝트를 마우스 오른쪽 단추로 클릭 하 고 선택 추가 -> 클래스.
있는지 확인 하십시오 클래스 템플릿 목록에서을 선택 합니다.
클래스 파일 및 클릭에 대 한 적절 한 이름을 입력 합니다. 추가.
새 클래스 파일에 다음을 추가 using 문입니다.
Imports Microsoft.VisualStudio Imports Microsoft.VisualStudio.Package Imports Microsoft.VisualStudio.TextManager.Interop Imports Microsoft.VisualStudio.OLE.Interop
using Microsoft.VisualStudio; using Microsoft.VisualStudio.Package; using Microsoft.VisualStudio.TextManager.Interop; using Microsoft.VisualStudio.OLE.Interop;
원하는 MPF 클래스에서 파생 클래스를 수정 합니다.
적어도 기본 클래스의 생성자 매개 변수를 사용 하는 클래스 생성자를 추가 하 고 생성자 매개 변수를 기본 클래스 생성자에 전달 합니다.
예를 들어, 클래스의 생성자에서 파생 된의 Source 클래스는 다음과 같이 보일 수 있습니다.
Namespace MyLanguagePackage Friend Class MySource Inherits Source Public Sub New(ByVal service As LanguageService, ByVal textLines As IVsTextLines, ByVal colorizer As Colorizer) MyBase.New(service, textLines, colorizer) End Sub End Class End Namespace
namespace MyLanguagePackage { class MySource : Source { public MySource(LanguageService service, IVsTextLines textLines, Colorizer colorizer) : base(service, textLines, colorizer) { } } }
편집 -> IntelliSense 메뉴에서 추상 클래스 구현 경우 기본 클래스의 추상 메서드를 구현 해야 합니다.
그렇지 않으면 내부 클래스는 캐럿 위치가 및 메서드 재정의를 입력 합니다.
예를 들어, 입력 public override 클래스에서 재정의할 수 있는 모든 방법으로 볼 수 있습니다.