Visual Studio의 다른 프로젝트 유형과 다른 Office 프로젝트에서 코드를 작성하는 몇 가지 측면이 있습니다. 이러한 차이점 중 상당수는 Office 개체 모델이 관리 코드에 노출되는 방식과 관련이 있습니다. 다른 차이점은 Office 프로젝트 디자인과 관련이 있습니다.
적용 대상: 이 항목의 정보는 문서 수준 프로젝트 및 VSTO 추가 기능 프로젝트에 적용됩니다. Office 응용 프로그램 및 프로젝트 유형에서 사용할 수 있는 기능을 참조하세요.
관리 코드 및 Office 프로그래밍
통합 Microsoft Office 솔루션을 만들 수 있게 하는 핵심 기술은 COM(구성 요소 개체 모델) 기술의 일부인 Automation입니다. 자동화를 사용하면 코드를 사용하여 적절한 프로그래밍 방식 인터페이스를 지원하는 모든 애플리케이션, DLL 또는 ActiveX 컨트롤에 의해 노출되는 소프트웨어 개체를 만들고 제어할 수 있습니다.
기본 interop 어셈블리 이해
Microsoft Office 애플리케이션은 대부분의 기능을 Automation에 노출합니다. 그러나 관리 코드(예: Visual Basic 또는 C#)를 직접 사용하여 Office 애플리케이션을 자동화할 수는 없습니다. 관리 코드를 사용하여 Office 애플리케이션을 자동화하려면 Office PIA(기본 interop 어셈블리)를 사용해야 합니다. 기본 interop 어셈블리를 사용하면 관리 코드가 Office 애플리케이션의 COM 기반 개체 모델과 상호 작용할 수 있습니다.
모든 Microsoft Office 애플리케이션에는 PIA가 있습니다. Visual Studio에서 Office 프로젝트를 만들면 해당 PIA에 대한 참조가 프로젝트에 자동으로 추가됩니다. 프로젝트에서 다른 Office 응용 프로그램의 기능을 자동화하려면 해당 PIA에 대한 참조를 수동으로 추가해야 합니다. 자세한 내용은 방법: 기본 interop 어셈블리를 통해 Office 애플리케이션을 대상으로 지정합니다.
디자인 타임 및 런타임에 기본 interop 어셈블리 사용
대부분의 개발 작업을 수행하려면 개발 컴퓨터의 전역 어셈블리 캐시에 Office PIA를 설치하고 등록해야 합니다. 자세한 내용은 Office 솔루션을 개발하도록 컴퓨터 구성을 참조하세요.
.NET Framework 4 이상을 대상으로 하는 Office 솔루션을 실행하려면 최종 사용자 컴퓨터에서 Office PIA가 필요하지 않습니다. 자세한 내용은 Office 솔루션 디자인 및 만들기를 참조하세요.
기본 interop 어셈블리에서 형식 사용
Office PIA에는 Office 애플리케이션의 개체 모델을 노출하는 형식과 코드에서 직접 사용할 수 없는 추가 인프라 형식의 조합이 포함되어 있습니다. Office PIA의 형식에 대한 개요는 Office 기본 interop 어셈블리의 클래스 및 인터페이스 개요를 참조하세요.
Office PIA의 형식은 COM 기반 개체 모델의 형식에 해당하므로 이러한 형식을 사용하는 방식은 다른 관리되는 형식과 다른 경우가 많습니다. 예를 들어 Office 기본 interop 어셈블리에 선택적 매개 변수가 있는 메서드를 호출하는 방법은 프로젝트에서 사용하는 프로그래밍 언어에 따라 달라집니다. 자세한 내용은 아래 항목을 참조하세요.
Office 프로젝트의 프로그램 모델
모든 Office 프로젝트에는 코드의 진입점을 제공하는 하나 이상의 생성된 클래스가 포함됩니다. 또한 이러한 클래스는 호스트 애플리케이션의 개체 모델에 대한 액세스 및 작업 창 및 사용자 지정 작업창과 같은 기능에 대한 액세스를 제공합니다.
생성된 클래스 이해
Excel 및 Word용 문서 수준 프로젝트에서 생성된 클래스는 애플리케이션의 개체 모델에서 최상위 개체와 유사합니다. 예를 들어 Word 문서 프로젝트에서 생성된 ThisDocument 클래스는 Word 개체 모델의 클래스와 Document 동일한 멤버를 제공합니다. 문서 수준 프로젝트에서 생성된 클래스에 대한 자세한 내용은 프로그램 문서 수준 사용자 지정을 참조하세요.
VSTO 추가 기능 프로젝트는 생성된 ThisAddIn클래스를 제공합니다. 이 클래스는 호스트 애플리케이션의 개체 모델에서 클래스와 유사하지 않습니다. 대신, 이 클래스는 VSTO 추가 기능 자체를 나타내며, 호스트 애플리케이션의 개체 모델에 액세스하고 VSTO 추가 기능에서 사용할 수 있는 다른 기능에 액세스하는 데 사용할 수 있는 멤버를 제공합니다. 자세한 내용은 프로그램 VSTO 추가 기능을 참조하세요.
Office 프로젝트에서 생성된 모든 클래스에는 Startup 및 Shutdown 이벤트 처리기가 포함됩니다. 코드 작성을 시작하려면 일반적으로 이러한 이벤트 처리기에 코드를 추가합니다. VSTO 추가 기능을 초기화하려면 이벤트 처리기에 코드를 Startup 추가할 수 있습니다. VSTO 추가 기능에서 사용하는 리소스를 정리하려면 이벤트 처리기에 코드를 Shutdown 추가할 수 있습니다. 자세한 내용은 Office 프로젝트의 이벤트를 참조하세요.
런타임에 생성된 클래스에 액세스
Office 솔루션이 로드되면 Visual Studio Tools for Office 런타임은 프로젝트에서 생성된 각 클래스를 인스턴스화합니다. 클래스를 사용하여 프로젝트의 모든 코드에서 이러한 개체에 Globals 액세스할 수 있습니다. 예를 들어 클래스를 Globals 사용하여 VSTO 추가 기능에서 ThisAddIn 리본 단추의 이벤트 처리기에서 클래스의 코드를 호출할 수 있습니다.
자세한 내용은 Office 프로젝트의 개체에 대한 전역 액세스를 참조하세요.
Office 솔루션의 네임스페이스 고려 사항
프로젝트를 만든 후에는 Office 프로젝트의 기본 네임스페이스 (또는 Visual Basic의 루트 네임스페이스 )를 변경할 수 없습니다. 기본 네임스페이스는 프로젝트를 만들 때 지정한 프로젝트 이름과 항상 일치합니다. 프로젝트의 이름을 바꾸면 기본 네임스페이스가 변경되지 않습니다. 프로젝트의 기본 네임스페이스에 대한 자세한 내용은 애플리케이션 페이지, 프로젝트 디자이너(C#) 및 애플리케이션 페이지, 프로젝트 디자이너(Visual Basic)를 참조하세요.
C# 프로젝트에서 호스트 항목 클래스의 네임스페이스 변경
호스트 항목 클래스(예: ThisAddIn, ThisWorkbook또는 ThisDocument 클래스)에는 Visual C# Office 프로젝트에 고유한 네임스페이스가 있습니다. 기본적으로 프로젝트의 호스트 항목에 대한 네임스페이스는 프로젝트를 만들 때 지정한 프로젝트 이름과 일치합니다.
Visual C# Office 프로젝트에서 호스트 항목의 네임스페이스를 변경하려면 호스트 항목의 네임스페이스 속성을 사용합니다. 자세한 내용은 Office 프로젝트의 속성을 참조하세요.
Office 프로젝트에서 지원되는 프로그래밍 언어
Visual Studio의 Office 프로젝트 템플릿은 Visual Basic 및 Visual C# 프로그래밍 언어만 지원합니다. 따라서 이러한 프로젝트 템플릿은 Visual Studio의 새 프로젝트 대화 상자의 Visual Basic 및 Visual C# 노드에서만 사용할 수 있습니다. 자세한 내용은 방법: Visual Studio에서 Office 프로젝트 만들기를 참조하세요.
언어 선택 및 Office 프로그래밍
Microsoft Office 및 VBA(Visual Basic for Applications)는 애플리케이션 사용자 지정 워크플로를 최적화하기 위해 함께 개발되었습니다. Visual Basic은 이러한 개발 중 일부를 상속했습니다. 예를 들어 Visual Basic은 선택적 매개 변수를 지원합니다. 즉, Visual C#을 사용할 때보다 Microsoft Office 기본 interop 어셈블리에서 일부 메서드를 호출할 때 코드를 더 적게 작성할 수 있습니다.
Visual Basic과 Office 솔루션의 Visual C#을 사용한 프로그램
Visual Basic 또는 Visual C#을 사용하여 Office 솔루션을 만들 수 있습니다. Microsoft Office 개체 모델은 Microsoft VBA(Visual Basic for Applications)와 함께 사용하도록 설계되었으므로 Visual Basic 개발자는 Microsoft Office 응용 프로그램에서 노출하는 개체를 편안하게 사용할 수 있습니다. Visual C# 개발자는 Visual Basic 개발자와 동일한 기능 대부분을 사용할 수 있지만 Office 개체 모델을 사용하기 위해 추가 코드를 작성해야 하는 경우도 있습니다. Office 개발의 기본 프로그래밍 기능과 Visual Basic 및 C#으로 작성된 관리 코드 간에는 몇 가지 차이점이 있습니다.
Visual Basic과 Visual C의 주요 차이점#
다음 표에서는 Office 개발에서 Visual Basic과 Visual C#의 주요 차이점을 보여 줍니다.
| 특징 | Description | Visual Basic 지원 | Visual C# 지원 |
|---|---|---|---|
| 선택적 매개 변수 | 대부분의 Microsoft Office 메서드에는 메서드를 호출할 때 필요하지 않은 매개 변수가 있습니다. 매개 변수에 대해 전달된 값이 없으면 기본값이 사용됩니다. | Visual Basic은 선택적 매개 변수를 지원합니다. | Visual C#은 대부분의 경우 선택적 매개 변수를 지원합니다. 자세한 내용은 Office 솔루션의 선택적 매개 변수를 참조하세요. |
| 참조로 매개 변수 전달 | 대부분의 Microsoft Office 기본 interop 어셈블리의 선택적 매개 변수는 값으로 전달될 수 있습니다. 그러나 일부 기본 interop 어셈블리에서는 참조 형식을 허용하는 선택적 매개 변수를 참조로 전달해야 합니다. 값 및 참조 형식 매개 변수에 대한 자세한 내용은 값 및 참조로 인수 전달(Visual Basic) 및 Pass 매개 변수(C# 프로그래밍 가이드)를 참조하세요. |
참조로 매개 변수를 전달하는 데 추가 작업이 필요하지 않습니다. Visual Basic 컴파일러는 필요한 경우 참조로 매개 변수를 자동으로 전달합니다. | 대부분의 경우 Visual C# 컴파일러는 필요한 경우 참조로 매개 변수를 자동으로 전달합니다. 자세한 내용은 Office 솔루션의 선택적 매개 변수를 참조하세요. |
| 매개 변수가 있는 속성 | 일부 속성은 매개 변수를 허용하고 읽기 전용 함수로 작동합니다. | Visual Basic은 매개 변수를 허용하는 속성을 지원합니다. | Visual C#은 매개 변수를 허용하는 속성을 지원합니다. |
| 지연 바인딩 | 지연 바인딩에는 디자인 타임에 변수를 개체 형식으로 캐스팅하는 대신 런타임에 개체의 속성을 결정하는 작업이 포함됩니다. | Visual Basic은 Option Strict 가 꺼져 있을 때 지연 바인딩을 수행합니다. Option Strict가 설정된 경우, 개체를 명시적으로 변환하고 System.Reflection 네임스페이스의 형식을 사용하여 런타임에 바인딩된 멤버에 접근해야 합니다. 자세한 내용은 Office 솔루션의 지연 바인딩을 참조하세요. | Visual C#은 .NET Framework 4를 대상으로 하는 프로젝트에서 지연 바인딩을 수행합니다. 자세한 내용은 Office 솔루션의 지연 바인딩을 참조하세요. |
Office 개발과 관리 코드 간의 주요 차이점
다음 표에서는 Visual Basic 또는 Visual C#으로 작성된 Office 개발 및 관리 코드 간의 주요 차이점을 보여 줍니다.
| 특징 | Description | Visual Basic 및 Visual C# 지원 |
|---|---|---|
| 배열 인덱스 | Microsoft Office 애플리케이션에서 컬렉션의 하한 배열은 1로 시작합니다. Visual Basic 및 Visual C#은 0부터 시작하는 배열을 사용합니다. 자세한 내용은 Visual Basic 의 배열(C# 프로그래밍 가이드) 및 배열을 참조하세요. | Microsoft Office 응용 프로그램의 개체 모델에서 컬렉션의 첫 번째 항목에 액세스하려면 0 대신 인덱스 1을 사용합니다. |