다음을 통해 공유


레거시 코드를 새 편집기 도입

편집기에서 Visual Studio 2010 에서 기존 코드 구성 요소에 액세스할 수 있는 다양 한 기능을 제공 합니다. 다음 지침은 MEF 구성 요소 편집기 기능을 사용 하려면 VSPackage, 예를 들어, 적용 하는 방법을 보여 줍니다. 지시 또한 편집기의 서비스 관리 대상 및 관리 되지 않는 코드를 가져올 수 어댑터를 사용 하는 방법을 보여 줍니다.

편집기 어댑터

편집기 어댑터 또는 shim을 뿐만 아니라 클래스 및 인터페이스를 노출 하는 편집기 개체에 대 한 래퍼 되는 Microsoft.VisualStudio.TextManager.Interop API입니다. 예를 들어 편집기 서비스 간에 이동 하려면 어댑터, Visual Studio 셸 명령 편집기 서비스를 사용할 수 있습니다. 이것이 어떻게 Visual Studio 편집기 현재 호스트입니다. 어댑터도에서 정확 하 게 작동 하려면 레거시 편집기와 언어 서비스 확장 사용 Visual Studio 2010.

편집기 어댑터를 사용 하 여

IVsEditorAdaptersFactoryService 새 편집기 인터페이스와 레거시 인터페이스 사이 전환 하는 방법 및 어댑터를 만드는 방법을 제공 합니다.

MEF 컴포넌트 부품에이 서비스를 사용 하는 경우 다음과 같은 서비스를 가져올 수 있습니다.

[Import(typeof(IVsEditorAdaptersFactoryService))]
internal IVsEditorAdaptersFactoryService editorFactory;

이 항목의 뒷부분에 나오는 "사용 하 여 Visual Studio 편집기 서비스에는 비 MEF 구성" 섹션에서 지시 MEF 아닌 구성 요소에서이 서비스를 사용 하려는 경우.

새 편집기 API와 레거시 API 간의 전환

편집기 개체 및 레거시 인터페이스 전환 하려면 다음 메서드를 사용 합니다.

메서드

변환

GetBufferAdapter

ITextBufferIVsTextBuffer로 변환합니다.

GetDataBuffer

IVsTextBufferITextBuffer로 변환합니다.

GetDocumentBuffer

IVsTextBufferITextBuffer로 변환합니다.

GetViewAdapter

ITextViewIVsTextView로 변환합니다.

GetWpfTextView

IVsTextViewIWpfTextView로 변환합니다.

어댑터 만들기

레거시 인터페이스에 대 한 어댑터를 만들려면 다음 메서드를 사용 합니다.

메서드

변환

CreateVsCodeWindowAdapter

IVsCodeWindow를 만듭니다.

CreateVsTextBufferAdapter

생성 된 IVsTextBuffer 지정한 IContentType.

CreateVsTextBufferAdapter

IVsTextBuffer를 만듭니다.

CreateVsTextBufferCoordinatorAdapter

IVsTextBufferCoordinator를 만듭니다.

CreateVsTextViewAdapter

ITextViewRoleSet에 대해 IVsTextView를 만듭니다.

CreateVsTextViewAdapter

IVsTextView를 만듭니다.

관리 되지 않는 코드에서 어댑터 만들기

모든 어댑터 클래스 로컬에 등록 된 co-creatable, 및를 사용 하 여 인스턴스화할 수 있는 VsLocalCreateInstance() 함수.

Vsshlids.h 파일에 정의 된 Guid를 사용 하 여 만든 모든 어댑터는. \VisualStudioIntegration\Common\Inc\ 폴더의 Visual Studio SDK가 설치 됩니다. Vstextbufferadapter의 인스턴스를 만들려면 다음 코드를 사용 합니다.

IVsTextBuffer *pBuf = NULL;
VsLocalCreateInstance(CLSID_VsTextBuffer, NULL, CLSCTX_INPROC_SERVER, IID_IVsTextBuffer, (void**)&pBuf);

관리 되는 코드에서 어댑터 만들기

공동 관리 되는 코드에서를 어댑터 같은 방식으로 관리 되지 않는 코드에 대 한 설명 작성 수 있습니다. 생성 및 어댑터와 상호 작용할 수 있습니다 MEF 서비스를 사용할 수도 있습니다. 이 방법으로 어댑터를 얻을 그 공동 작성 하는 경우 보다 더욱 세밀 한 제어를 수 있습니다.

Ivstextview에 대 한 어댑터를 만들려면

  1. Microsoft.visualstudio.editor.dll에 대 한 참조를 추가 합니다. CopyLocal 로 설정 된 false.

  2. 인스턴스화하는 IVsEditorAdaptersFactoryService, 다음과 같이 합니다.

    using Microsoft.VisualStudio.Editor;
    ...
    IVsEditorAdaptersFactoryService adapterFactoryService = ComponentModel.GetService<IVsEditorAdaptersFactoryService>();
    
  3. CreateX() 메서드를 호출합니다.

    adapterFactoryService.CreateTextViewAdapter(textView);
    

관리 되지 않는 코드에서 직접 Visual Studio 편집기를 사용 하 여

Microsoft.VisualStudio.Platform.VSEditor 네임 스페이스 및 네임 스페이스 Microsoft.VisualStudio.Platform.VSEditor.Interop IVx * 인터페이스로 COM 호출 가능 인터페이스를 노출 합니다. 예를 들어, Microsoft.VisualStudio.Platform.VSEditor.Interop.IVxTextBuffer 인터페이스의 COM 버전입니다 있는 ITextBuffer 인터페이스입니다. IVxTextBuffer, 버퍼 스냅숏에 액세스할 버퍼를 수정, 텍스트 변경 이벤트는 버퍼에서 수신 하 고 추적 지점 및 범위를 만들 수 있습니다. 다음 단계에 액세스 하는 방법을 보여는 IVxTextBuffer 에서 IVsTextBuffer.

Ivxtextbuffer를 가져올 수

  1. IVx * 인터페이스에 대 한 정의 VSEditor.h 파일에 해당 합니다. \VisualStudioIntegration\Common\Inc\ 폴더의 Visual Studio SDK가 설치 됩니다.

  2. 다음 코드를 사용 하 여 텍스트 버퍼를 인스턴스화하는 IVsUserData->GetData() 메서드. 다음 코드에서 pData 에 대 한 포인터입니다 있는 IVsUserData 개체입니다.

    #include <textmgr.h>
    #include <VSEditor.h>
    #include <vsshlids.h>
    
    CComPtr<IVsTextBuffer> pVsTextBuffer;
    CComPtr<IVsUserData> pData;
    CComPtr<IVxTextBuffer> pVxBuffer;
    ...
    if (SUCCEEDED(pVsTextBuffer->QueryInterface(IID_IVsUserData, &pData))
    {
        CComVariant vt;
        if (SUCCEEDED(pData->GetData(GUID_VxTextBuffer, &vt)) &&
        (vt.Type == VT_UNKNOWN) && (vt.punkVal != NULL))
        {
            vt.punkVal->QueryInterface(IID_IVxTextBuffer, (void**)&pVxBuffer);
        }
    }
    

Visual Studio 편집기 서비스 MEF 구성 요소를 사용 하 여

MEF 사용 하지 않은 관리 되는 코드 구성 요소 Visual Studio 편집기의 서비스를 사용 하려는 경우 ComponentModelHost Vspackage를 포함 하는 어셈블리에 대 한 참조를 추가 하 고 해당 SComponentModel 서비스를 얻을.

MEF 아닌 구성 요소에서 Visual Studio 편집기 구성 요소를 사용 하려면

  1. Microsoft.VisualStudio.ComponentModelHost.dll 어셈블리에 대 한 참조 추가. Visual Studio 설치의 \Common7\IDE\ 폴더에 있습니다. CopyLocal 로 설정 된 false.

  2. 개인 추가 IComponentModel Visual Studio 편집기 서비스는 다음과 같이 사용 하 여 클래스에 멤버입니다.

    using Microsoft.VisualStudio.ComponentModelHost;
    ....
    private IComponentModel componentModel;
    
  3. 구성 요소 모델을 초기화 방법에 구성 요소를 인스턴스화하십시오.

    componentModel =
     (IComponentModel)Package.GetGlobalService(typeof(SComponentModel));
    
  4. 그런 다음 Visual Studio 편집기 서비스 중 하나를 호출 하 여 까는 IComponentModel.GetService<T>() 원하는 서비스에 대 한 메서드.

    textBufferFactoryService =
         componentModel.GetService<ITextBufferFactoryService>();