Visual Basic 및 C# 응용 프로그램에 대한 CodeModel 개체 개요
업데이트: 2007년 11월
Visual Basic, Visual C# 또는 Visual J# 응용 프로그램에서 코드의 구조를 프로그래밍 방식으로 검사해야 하는 경우가 있습니다. 응용 프로그램에 정의된 네임스페이스와 해당 중첩 관계를 확인하려는 경우를 예로 들 수 있습니다. 또는 설명서의 기본 내용으로 클래스 및 공용 멤버가 나열된 문서를 만들어햐 하는 경우도 생길 수 있습니다.
CodeModel2 개체는 응용 프로그램의 코드에 액세스하는 데 사용할 수 있는 일반 확장성 개체입니다. CodeModel2 개체는 코드의 텍스트 목록을 제공하지 않습니다. 대신 이 개체는 코드 요소를 나타내는 개체의 중첩된 컬렉션을 제공합니다. 예를 들어, 코드에 있는 각 네임스페이스는 CodeNamespace 개체로 표시됩니다. 프로젝트와 관련된 CodeModel2 개체에는 CodeModel 속성을 사용하여 액세스할 수 있습니다.
FileCodeModel2 개체는 단일 소스 파일의 코드에 액세스하는 데 사용할 수 있는 일반 확장성 개체입니다. 응용 프로그램에 있는 각 소스 파일은 ProjectItem 개체로 표시되고 프로젝트 항목과 관련된 FileCodeModel2 개체는 FileCodeModel 속성에 있습니다.
CodeModel2 및 FileCodeModel2 개체는 모두 CodeModel2.CodeElements 및 FileCodeModel.CodeElements 속성을 제공합니다. 이 두 속성은 각각 CodeElement2 개체의 컬렉션입니다. Visual Basic, Visual C# 및 Visual J#에서는 조금씩 다른 방식으로 CodeModel2 및 FileCodeModel 개체를 지원합니다. Visual Basic 구현 예제는 코드 모델을 사용하여 코드 검색(Visual Basic) 및 방법: CodeModel 개체를 사용하여 Visual Basic 코드 분석을 참조하십시오. Visual C# 구현 예제는 코드 모델을 사용하여 코드 검색(Visual C#) 및 방법: CodeModel 개체를 사용하여 C# 클래스 만들기를 참조하십시오.
언어에 따라서는 Visual Studio 코드 모델의 일부가 구현되지 않습니다. 예외가 발생하면 관련 도움말 항목이 표시됩니다. 코드 모델 구현 간의 차이는 대부분 언어 간의 기능상 차이로 인해 발생합니다. 예를 들어, Visual Basic, Visual C# 또는 Visual J#에서는 CodeNamespace 개체에 함수를 추가할 수 없습니다. 최상위 함수 정의 기능은 Visual C++에만 있기 때문입니다.
다음 표에는 주 코드 모델 개체가 나열되어 있습니다. 각 개체에 대한 메서드와 속성의 목록을 보려면 해당 링크를 클릭하십시오.
형식 |
설명 |
---|---|
소스 파일에서 네임스페이스 구문을 나타냅니다. |
|
소스 코드의 구조를 나타냅니다. |
|
소스 코드의 인터페이스를 나타냅니다. |
|
소스 코드의 클래스를 나타냅니다. |
|
소스 코드의 열거형을 나타냅니다. |
|
소스 파일에서 변수 구문을 정의합니다. |
|
소스 코드에서 대리자를 나타냅니다. |
|
소스 파일에서 코드 요소 또는 구문을 나타냅니다. |
|
코드 이벤트 요소를 모델링합니다. |
|
소스 파일에서 속성 구문을 정의합니다. |
|
코드 요소의 특성을 정의합니다. |
|
네임스페이스를 가져오는 문을 사용하는 모델입니다. |
|
소스 파일에서 함수 구문을 나타냅니다. |
|
함수, 속성 등의 매개 변수를 정의합니다. |
중첩된 코드 요소
응용 프로그램의 코드 요소는 중첩된 아키텍처로 구성됩니다. 예를 들어, 프로젝트 항목의 FileCodeModel2는 CodeElements 컬렉션에 네임스페이스에 대한 코드 요소를 포함할 수도 있습니다. 네임스페이스를 표시하는 CodeNamespace 개체의 Members 속성에는 클래스를 표시하는 다른 코드 요소가 몇 가지 포함될 수 있습니다. 각 CodeClass2 요소에는 속성(CodeProperty2 개체)과 메서드(CodeFunction2 개체)를 표시하는 코드 요소가 포함될 수 있습니다. 중첩된 코드 요소를 검색하는 메서드는 코드 요소의 형식에 따라 다르며 이에 관해 다음 단원에서 설명합니다.
코드 요소 범주
CodeElement2 클래스는 프로젝트 항목(소스 파일)의 모든 코드 요소를 표시하는 기본 클래스입니다. CodeElement2에서 파생된 많은 클래스가 응용 프로그램의 네임스페이스, 클래스, 속성, 메서드 및 이벤트와 같은 구문을 표시합니다. 코드 요소는 형식을 표시하는 것과 그렇지 않은 것 등 크게 두 가지 범주로 나뉩니다.
응용 프로그램의 일부 코드 요소는 형식을 표시합니다. 이러한 코드 요소는 CodeElement2 개체뿐 아니라 CodeType 개체에서 파생됩니다.
IsCodeType 속성을 사용하면 CodeElement2 개체에 대한 참조가 이러한 형식 중 하나인지 확인할 수 있습니다. 이러한 형식의 중첩된 코드 요소를 찾으려면 CodeElements 컬렉션을 반환하는 Members 속성을 사용합니다. 방법: CodeModel 개체를 사용하여 Visual Basic 코드 분석에는 프로젝트의 모든 클래스를 찾는 예제가 들어 있습니다.
다른 형식의 코드 요소 아래 중첩된 코드 요소를 찾는 방법은 중첩된 코드 요소의 형식에 따라 다릅니다. 예를 들어, 속성에 Get과 Set 메서드만 있으므로 속성과 연결된 CodeProperty2 개체에는 CodeFunction2 요소를 반환하는 Getter 속성과 Setter 속성이 있습니다. 다음 목록에서는 코드 요소 형식 중 중첩된 코드 요소를 찾는 데 사용하는 속성을 보여 줍니다.
형식 |
속성 |
---|---|
CodeFunction |
|
CodeNamespace |
|
CodeProperty |
외부 참조의 코드 요소
프로젝트 참조에서 정의된 형식에서 가져온 형식 선언이 코드에 들어 있는 경우가 있습니다. 참조 추가 대화 상자나 References.Add 확장성 메서드를 사용하여 프로젝트 참조를 추가합니다. Visual Basic 프로젝트 시스템에서는 이름 외에 이러한 참조를 표시하는 CodeTypeRef2 개체를 확인하지 않습니다. 그러므로 참조와 연결된 CodeElement2 개체의 Name 속성 이외에 다른 속성이나 메서드를 사용하면 "구현 안 됨"이라는 예외가 발생합니다. 이러한 참조를 "형식 이름 전용" 코드 요소라고 합니다. 외부 참조를 나타내는 CodeType 개체의 InfoLocation 속성은 vsCMInfoLocationNone으로 설정됩니다.
컴파일러 오류 및 CodeModel 개체
CodeElement2 개체를 참조하는 코드를 작성할 때는 참조를 하는 동안 내부 소스 코드가 변경될 수 있다는 것을 명심해야 합니다. 코드 요소가 삭제되거나 이름이 변경되거나 컴파일러 오류가 발생할 수 있습니다. 이 경우 CodeElement2 개체를 호출하면 "HRESULT에서 오류가 발생했습니다. 0x80047E2C"라는 오류 메시지가 반환됩니다.
참고 항목
작업
방법: CodeModel 개체를 사용하여 Visual Basic 코드 분석
Visual Basic 및 Visual C# 확장성 문제 해결