방법: DTE 및 DTE2 개체에 대한 참조 가져오기

참고

Visual Studio 2013에서 추가 기능은 더 이상 사용되지 않습니다.추가 기능을 VSPackage 확장으로 업그레이드하는 것이 좋습니다.자세한 내용은 FAQ: VSPackage 확장으로 추가 기능 변환을 참조하십시오.

EnvDTE 어셈블리에서 DTE 개체는 Visual Studio IDE(통합 개발 환경)를 나타내며, 자동화 모델 계층 구조에서 최상위 개체입니다. 핵심 자동화 모델에 대한 엑세스를 얻기위해서는, 자동화 응용 프로그램은 반드시 이 개체에 대한 참조를 가져야 합니다.

그러나 EnvDTE80 어셈블리의 추가는 DTE2 라는 대체 최상위 개체를 제공하고 DTE 개체를 대체합니다. 이러한 두 개체는 동작이나 프로그래밍하는 방식이 서로 비슷하지만 DTE2 는 새로운 기능을 포함하고 있고 새롭고 업데이트된 여러 개체 및 컬렉션을 호스팅한다는 점이 다릅니다.

새로운 자동화 응용 프로그램을 만들 때는 두 개체 모두에 대한 참조를 만드는 것이 좋습니다- DTE2 개체에는 새로운 기능에대한 액세스를 제공하고 DTE 개체에는 나머지 핵심 기능에 대한 엑세스를 제공합니다. 사용가능 하다면 DTE 대신에 DTE2 에 있는 새로운 개체와 컬렉션을 사용하는 것이 좋습니다.

다음 절차에서는 DTE2 개체에 대한 참조를 가져오는 방법을 보여 줍니다. DTE 개체에도 이와 동일한 절차가 적용됩니다. 개체에 참조를 추가하기 전에 적절한 어셈블리 및 형식 라이브러리에 참조를 반드시 추가해야 합니다. 자세한 내용은 방법: 자동화 네임스페이스에 참조 추가을 참조하십시오.

Visual Studio 2013 에 사용할 프로그래밍 ID(ProgID)는 VisualStudio.DTE.12.0입니다. 이에 맞춰 반환된 개체를 DTE2 인터페이스로 캐스팅할 수 있습니다.

호출이 되면 DTE2 속성, 메서드 및 이벤트는 DTE 형식을 반환합니다. 예를 들어, Solution 는 예상과 달리 Solution2 개체가 아닌 Solution 개체를 반환합니다. 이것은 DTE2 멤버 또는 다른 형식 멤버를 사용할때 반드시 명시적으로 타입캐스트를 수행해야하기 때문입니다. 이 디자인은 일관성을 증대시키고 혼란을 줄일 수 있습니다. EnvDTE80.dll 어셈블리는 모든 DTE2 속성에 대해 일관적으로 동일한 인터페이스를 반환합니다. 최근의 인터페이스 버전을 반환하면 혼동 될 수 있습니다.-예를 들어, 이후 버전의 Visual Studio 가 DTE3 을 가지고 있으면, 일부 인터페이스는 DTE, 일부 DTE2, 및 일부 DTE3를 반환 할 수도 있습니다. 게다가 EnvDTE 인터페이스에서 상속된 EnvDTE80 에서 "2" 인터페이스 때문에 COM interop 문제를 발생 시킬 수 있습니다. 예를 들어, Window2Window 로부터 파생한 경우, DTE 속성을 Window2 에 추가하면 Windows 속성은 숨겨지고 COM 응용 프로그램에서 올바르게 동작하지 않을 수 있습니다.

참고

일부 Visual Studio 사용자 인터페이스 요소의 경우 다음 지침에 설명된 것과 다른 이름 또는 위치가 시스템에 표시될 수 있습니다.설치한 Visual Studio 버전과 사용하는 설정에 따라 이러한 요소가 결정됩니다.자세한 내용은 Visual Studio에서 개발 설정 사용자 지정을 참조하십시오.

Visual Basic 및 C#에서 DTE2 개체를 참조하려면

  • 코드에 아래의 코드를 추가합니다.

    ' Get an instance of the currently running Visual Studio IDE.
    Dim DTE2 as EnvDTE80.DTE2
    DTE2 = System.Runtime.InteropServices.Marshal. _
    GetActiveObject("VisualStudio.DTE.12.0")
    
    // Get an instance of the currently running Visual Studio IDE.
    EnvDTE80.DTE2 dte2;
    dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
    GetActiveObject("VisualStudio.DTE.12.0");
    

Visual C++(ATL)에서 DTE 또는 DTE2 개체를 참조하려면

  • 코드에 아래의 코드를 추가합니다.

    CComPtr<EnvDTE::_DTE> m_pDTE;
    CComPtr<EnvDTE80::DTE2> m_pDTE2;
    CLSID clsid;
    CLSID clsid2;
    CLSIDFromProgID(L"VisualStudio.DTE.12.0",&clsid);
    CLSIDFromProgID(L"VisualStudio.DTE.12.0",&clsid2);
    CComPtr<IUnknown> punk;
    CComPtr<IUnknown> punk2;
    // Get a running instance of Visual Studio.
    HRESULT hr = GetActiveObject(clsid,NULL,&punk);
    hr = GetActiveObject(clsid2,NULL,&punk2);
    m_pDTE = punk;
    m_pDTE2 = punk2;
    

참고 항목

작업

방법: 자동화 네임스페이스에 참조 추가

방법: 추가 기능 관리자를 사용하여 추가 기능 제어

개념

IDE의 특정 인스턴스에 연결

추가 기능 등록

자동화 개체 모델 차트

기타 리소스

추가 기능 및 마법사 만들기