프로젝트 확장성 소개

업데이트: 2007년 11월

이 개체 모델을 사용하려면 프로젝트에 VSLangProj 어셈블리(VSLangProj.dll, VSLangProj2.dll, VSLangProj80.dll 및 VSLangProj90.dll 어셈블리)에 대한 참조를 추가하기만 하면 됩니다. 자세한 내용은 방법: Visual Studio에서 참조 추가 또는 제거(Visual Basic)를 참조하십시오. 따라서 매크로, 추가 기능 또는 IDE를 확장하거나 자동화하는 데 필요한 모든 프로젝트 형식에 대해 이 개체 모델을 사용할 수 있습니다. 매크로는 Visual Basic을 사용하여 매크로 통합 개발 환경에서 작성합니다. 이 항목의 예제는 Visual Basic 및 Visual C# 언어로 작성되었습니다. 예제를 실행하는 방법에 대한 자세한 내용은 방법: 자동화 개체 모델 코드의 예제 컴파일 및 실행을 참조하십시오. Visual Basic, Visual C#, Visual C++ 및 Visual J# 등의 모든 Visual Studio 호스팅된 언어로 추가 기능을 작성할 수 있습니다. VSLangProj, VSLangProj2, VSLangProj80VslangProj90 멤버에 대한 참조 항목에 이러한 각 언어에 대한 구문이 나와 있습니다. 자동화 프로젝트 형식 및 자동화의 기능에 대한 자세한 내용은 추가 기능 및 마법사 만들기를 참조하십시오.

VSLangProj, VSLangProj2, VSLangProj80 및 VSLangProj90 네임스페이스

이러한 네임스페이스에는 Visual Basic, Visual C# 및 Visual J# 프로젝트에 대한 클래스, 인터페이스, 열거형이 모두 들어 있습니다. 네임스페이스에 있는 개체의 전체 목록을 보려면 프로젝트를 위한 Visual Basic 및 Visual C# 확장성 개체 모델을 참조하십시오.

EnvDTE 어셈블리와 함께 VSLangProj 어셈블리를 사용할 때 발생할 수 있는 오류

하나 이상의 VSLangProj 어셈블리와 EnvDTE 어셈블리를 참조하는 프로젝트를 만드는 경우 런타임에 다음과 같은 오류가 발생할 수 있습니다.

"처리되지 않은 예외: System.IO.FileNotFoundException: 'EnvDTE, Version=7.0.3300.0' 파일을 로드하는 동안 오류가 발생했습니다."

이 오류는 런타임 형식 확인이 충돌하는 경우에 발생합니다. 즉, Visual Studio 2005에 포함된 EnvDTE의 버전이 8.0.xx이지만 프로젝트의 구성 참조가 이 어셈블리의 이전 버전인 7.0.xx를 조회하는 경우에 이 오류가 발생합니다. 이 문제를 해결하려면 최신 버전의 EnvDTE에 대한 바인딩 리디렉션을 프로젝트의 구성 파일(.config)에 추가해야 합니다. 이렇게 하면 Visual Studio에서 최신 버전의 EnvDTE를 로드하므로 이 오류가 발생하지 않습니다.

이를 위해서는 "응용 프로그램 구성 파일"을 프로젝트에 추가한 다음 그 내용을 다음과 같이 바꿉니다.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-
        com:asm.v1" appliesTo="v2.0.50318">
            <dependentAssembly>
                <assemblyIdentity name="EnvDTE" publicKeyToken=
                "b03f5f7f11d50a3a"/>
                <bindingRedirect oldVersion="7.0.3300.0" 
                newVersion="8.0.0.0"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

VSProject2 개체

이 개체는 확장성 모델에 있는 다른 개체에 대한 액세스를 제공합니다. DTE 개체는 Visual Studio 자동화 모델의 최상위 개체입니다. 일반 확장성 모델에서 프로젝트는 일반 Project 개체로 표시됩니다. Project 개체에는 Object 속성이 있습니다. 이 속성의 형식은 프로젝트의 언어에 의해 런타임에서 결정됩니다. Visual Basic, Visual C# 또는 Visual J# 프로젝트에서 Object 속성은 VSProject2 형식의 개체를 반환합니다. Object 속성의 형식은 Object이므로 참조를 VSProject2 형식으로 캐스팅해야 합니다. 첫 번째 프로젝트가 Visual Basic 프로젝트인 경우 매크로에서 캐스트는 다음과 같이 나타납니다.

Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj
Imports VSLangProj2
Imports VSLangProj80
Imports VSLangProj90
Dim proj As EnvDTE.Project
Dim vsproject As VSLangProj80.VSProject2
proj = DTE.Solution.Projects.Item(1)
vsproject = CType(proj.Object, VSLangProj80.VSProject2)
using EnvDTE;
using EnvDTE80;
using EnvDTE90;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
EnvDTE.Project proj;
VSLangProj80.VSproject2 vsproject;
proj = DTE2.Solution.Projects.Item(1);
vsproject = (VSLangProj80.VSProject2)proj;

VSProject2 항목을 참조하면 프로젝트의 속성, 구성, 파일, 폴더, Imports 문 및 참조를 조작할 수 있습니다.

자세한 내용은 VSProject2 개체 소개를 참조하십시오.

References 및 Reference 개체

VSProject2 개체에 포함된 References 속성은 Reference3 개체의 컬렉션을 유지합니다. Reference3 개체는 프로젝트 참조를 나타내며 기본적으로 Remove 메서드를 지원하는 읽기 전용 개체입니다. References 개체를 사용하면 COM, .NET 어셈블리, ActiveX, 기타 프로젝트에 대한 참조를 추가하고, 참조를 추가, 제거 또는 변경할 때 이벤트를 발생시킬 수 있습니다.

References 개체는 프로젝트의 웹 참조를 포함하지 않습니다. WebReferencesFolder 속성의 ProjectItems 속성에 액세스하여 프로젝트의 웹 참조를 검색할 수 있습니다.

자세한 내용과 코드 예제는 ReferenceReference3 개체, References 컬렉션, References 속성, WebReferencesFolder 속성을 참조하십시오.

Imports 개체

VSProject2 개체에 포함된 Imports 속성은 전체 Visual Basic 프로젝트에 적용되는 Imports 문의 컬렉션을 유지합니다. 이 컬렉션에 Imports 문을 추가하면 해당 Imports 문(예: Imports VSLangProj)을 코드 파일에 추가할 필요가 없습니다. 이 개체를 사용하여 Imports 문을 추가하고 삭제할 수 있을 뿐 아니라 명령문을 추가하거나 삭제하는 데 따른 이벤트도 발생시킬 수 있습니다. Visual C# 프로젝트에는 이에 상응하는 항목이 없으며 Visual C# 프로젝트에 적용되는 VSProject2.Imports 속성은 Nothing 또는 null을 반환합니다. 자세한 내용은 Imports를 참조하십시오.

VSProjectItem 및 BuildManager 개체

VSProjectItem 개체는 VSProject2 개체에 해당하는 프로젝트 항목 개체입니다. 일반 확장성 모델에서 제네릭 ProjectItem 개체는 프로젝트 항목을 나타냅니다. Object 속성은 Object 형식이며, Visual Basic 또는 Visual C# 프로젝트에서 이 속성의 형식은 VSProjectItem입니다. 매크로에서 개체를 VSProjectItem 형식으로 캐스팅하는 방법은 다음과 같습니다.

Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj
Imports VSLangProj2
Imports VSLangProj80
Imports VSLangProj90
Dim pi As VSProjectItem
pi = CType(DTE2.Solution.Projects.Item(1).ProjectItems.Item(1)._
    Object, VSProjectItem)
using EnvDTE;
using EnvDTE80;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
using VSLangProj90;
EnvDTE.Project proj;
VSLangProj.VSProjectItem pi;
Pi = (VSProject2)DTE2.Solution.Projects.Item(1).ProjectItems.Item(1).
Object;

VSProjectItem 개체에는 부모 프로젝트 항목 및 프로젝트로 연결하는 속성과 이 항목을 대상으로 사용자 지정 도구를 실행하는 메서드가 있습니다. BuildManager 개체는 사용자 지정 도구 출력을 처리합니다. 자세한 내용은 RunCustomTool 메서드, BuildManager 개체 소개, VSProjectItem 개체 및 BuildManager 개체를 참조하십시오.

Properties 속성

일반 확장성 모델의 다음 세 개체에는 Properties 속성이 있습니다.

  • Project 개체   이 개체의 속성은 IDE에서 프로젝트의 속성 페이지 대화 상자에 있는 공용 속성 탭에 나타나는 속성에 해당합니다.

  • Configuration 개체   이 개체의 속성은 IDE에서 프로젝트의 속성 페이지 대화 상자에 있는 구성 속성 탭에 나타나는 속성에 해당합니다.

  • ProjectItem 개체   이 개체의 속성은 솔루션 탐색기에서 프로젝트 항목을 선택할 경우 속성 창에 나타나는 속성에 해당합니다.

  • 각 개체에서 Properties 속성은 Property 형식 개체의 컬렉션입니다. 속성의 인덱스(1부터 시작) 또는 속성 이름을 지정하여 컬렉션에서 Property 개체를 얻을 수 있습니다. 컬렉션의 내용은 언어에 따라 다릅니다. 프로젝트 항목의 경우, 컬렉션의 내용은 항목이 파일인지 폴더인지에 따라서도 달라집니다.

참고 항목

개념

Visual Studio 자동화의 범위

기타 리소스

추가 기능 및 마법사 만들기