다음을 통해 공유


Visual Studio Tools for Office 버전 2003에서 업그레이드

업데이트: 2007년 11월

Visual Studio Tools for Office, Version 2003에서 Microsoft Visual Studio 2005 Tools for the Microsoft Office System(Visual Studio Tools for Office)으로 업그레이드한 후에는 문서 수준 프로젝트에 대한 몇 가지 업그레이드 단계를 수동으로 수행해야 합니다.

새 프로젝트 시스템에서는 프로젝트 코드 템플릿이 크게 변경되었습니다. 업그레이드된 프로젝트에는 새 프로젝트 구조가 있지만 코드는 이전 프로젝트 코드 템플릿을 기반으로 하는 원본 코드 파일에 남아 있습니다. 업그레이드 후 솔루션이 곧바로 실행될 수 있도록 새 프로젝트 클래스는 기존의 가져온 클래스(기본 이름이 OfficeCodeBehind인 원본 클래스)를 인스턴스화합니다. 완전하게 업그레이드하려면 이 항목의 설명에 따라 기존 OfficeCodeBehind 클래스의 코드를 새 문서, 통합 문서 또는 시트 클래스로 이동해야 합니다.

새 프로젝트 시스템 및 구조

Visual Studio Tools for Office, Version 2003의 프로젝트 시스템에는 코드 작성에 사용하는 주 클래스 파일이 하나 있었습니다. 새 프로젝트 시스템에는 솔루션 탐색기에 문서나 통합 문서를 나타내는 컨테이너 구조가 있습니다. 코드의 클래스 파일은 컨테이너 구조 아래에 있습니다. 이 클래스 파일 아래에는 Visual Studio Tools for Office에서 생성된 코드가 들어 있는 숨김 파일이 있습니다. 숨김 파일은 개발 도중 다시 생성될 수 있으며 이때 변경 내용이 손실되므로 숨김 파일의 코드는 수정하지 않는 것이 좋습니다.

Excel 통합 문서 및 템플릿 프로젝트

이제 Excel 통합 문서 및 템플릿 프로젝트에는 각 통합 문서별 클래스 파일과 통합 문서 전체에 대한 클래스 파일이 포함됩니다. 통합 문서의 컨트롤에 응답하는 코드 등과 같이 통합 문서에 고유한 코드는 시트 클래스에 배치해야 합니다. 기본적으로 새 문서에서 이러한 클래스의 이름은 Sheet1.vb 또는 Sheet1.cs, Sheet2.vb 또는 Sheet2.cs 등과 같이 지정됩니다. 통합 문서 Open 이벤트, BeforeClose 이벤트 및 작업 창 코드 등과 같이 통합 문서 전체에 적용되는 코드는 통합 문서 클래스에 배치해야 합니다. 기본적으로 이 클래스의 이름은 ThisWorkbook.vb 또는 ThisWorkbook.cs입니다.

Word 문서 및 템플릿 프로젝트

Word 문서 및 템플릿 프로젝트에는 문서에 관련된 모든 코드가 포함되는 하나의 코드 파일이 있습니다. 기본적으로 이 클래스의 이름은 ThisDocument.vb 또는 ThisDocument.cs입니다.

자세한 내용은 Office 프로젝트 템플릿을 참조하십시오.

업그레이드 프로세스

프로젝트를 업그레이드하면 Visual Studio에서는 다음 작업을 수행합니다.

  • 새 파일 형식과 프로젝트 구조에 맞게 프로젝트를 업그레이드합니다.

  • 기존 문서를 새 프로젝트 폴더로 복사합니다.

  • 기존 관리 코드 확장이 실행되지 않도록 사용자 지정 문서 속성 _AssemblyName0_AssemblyLocation0을 제거합니다. 이들 속성은 프로젝트를 빌드할 때 다시 추가됩니다.

  • 원래의 주 코드 파일을 추가하지만 발생하는 결과를 설명하기 위해 주석을 통합하고 파일의 이름을 <DocumentName>에서 <DocumentName>(old)로 변경합니다.

  • 원래 프로젝트의 모든 파일을 새 프로젝트에 추가합니다.

  • 기존의 모든 참조를 새 프로젝트에 추가합니다.

기존 코드는 새 클래스로 마이그레이션되지 않습니다. 대신 새로운 주 클래스의 Startup 메서드에서 기존 주 클래스의 _Startup 메서드가 호출됩니다. 이를 통해 솔루션이 기존 버전에서와 동일한 방식으로 실행되도록 기존 클래스를 인스턴스화합니다.

<DocumentName>(old)의 기본 클래스 이름은 OfficeCodeBehind입니다. 업그레이드된 Word 프로젝트에서 주 클래스의 기본 이름은 ThisDocument입니다. 업그레이드된 Excel 프로젝트에서 기본 클래스의 기본 이름은, 통합 문서 수준에서 실행되는 코드가 포함된 클래스의 경우에는 ThisWorkbook이고 워크시트 수준에서 실행되는 코드의 경우에는 Sheet1, Sheet2 등과 같은 형식입니다.

업그레이드를 완료하려면 다음을 수행해야 합니다.

  • 기본 이름이 OfficeCodeBehind인 기존 클래스의 코드를 새 문서, 통합 문서 및 시트 클래스로 직접 이동한 다음 기존 코드 파일을 삭제합니다. 그러나 기존 코드를 원래대로 유지하려면 기존 코드 파일을 그대로 두고 새 클래스에서 해당 코드를 호출하여 실행할 수 있습니다. 도구에 의해 추가된 모든 새 코드는 새 클래스에 넣습니다.

  • 아래에 설명된 것처럼 코드를 업데이트합니다.

  • 모든 ActiveX 컨트롤을 관리되는 컨트롤로 바꿉니다.

선택적으로 다음을 수행할 수도 있습니다.

  • C# 코드를 리팩터링합니다.

코드를 기존의 주 클래스에서 새 클래스로 이동

Visual Studio의 도구를 활용할 수 있도록 코드를 기존 클래스에서 새 클래스로 이동하는 것이 좋습니다. 도구는 코드를 생성할 때 자동으로 새 클래스를 사용합니다. 예를 들어, 문서에 단추를 추가하고 해당 단추를 두 번 클릭하여 코드를 가져오면 기본 이벤트 처리기가 새 클래스에 추가됩니다.

Excel 솔루션을 업그레이드하는 경우 이동하는 각 메서드를 어느 클래스에 포함할지 고려해야 합니다. 메서드가 일반적으로 통합 문서 및/또는 모든 시트와 관련된 경우 코드를 ThisWorkbook 클래스에 넣어야 합니다. 시트에 있는 컨트롤의 코드와 같이 코드가 하나의 시트와 관련된 경우 코드는 적절한 시트 클래스에 속합니다.

손쉽게 시작할 수 있도록 새 ThisDocument 또는 ThisWorkbook 클래스에서 생성된 코드에는 주석 처리된 자리 표시자 메서드가 들어 있습니다. 이 메서드는 다음 두 방법 중 한 가지로 사용할 수 있습니다.

  • 기존 클래스의 모든 코드를 업그레이드된 솔루션에서 제공하는 새 클래스에 넣습니다.

  • 새 메서드에 기존 클래스의 기존 메서드를 호출하는 코드를 작성합니다. 이 작업을 수행하려면 기존 클래스의 메서드를 변경하여 private이 아닌 메서드로 만들어야 합니다.

예제

다음은 기존 클래스를 인스턴스화하고 해당 클래스의 메서드를 호출하는 자리 표시자 메서드의 예제입니다.

Private Sub ThisDocument_Startup(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles Me.Startup

    OldCode = New OfficeCodeBehind()
    OldCode._Startup(Me.ThisApplication, Me)
End Sub

''Private Sub ThisDocument_Open() Handles MyBase.Open
''    OldCode.ThisDocument_Open()
''End Sub
''
''Private Sub ThisDocument_Close() Handles MyBase.CloseEvent
''    OldCode.ThisDocument_Close()
''End Sub
private void ThisDocument_Startup(object sender, System.EventArgs e)
{
    OldCode = new OfficeCodeBehind();
    OldCode._Startup(this.Application, this);
}

//private void ThisDocument_Open()
//{
//    OldCode.ThisDocument_Open()
//}
//
//private void ThisDocument_Close(ref bool Cancel)
//{
//    OldCode.ThisDocument_Close(ref Cancel)
//}

모든 코드가 새 클래스로 이동했으면 기존 클래스를 제거합니다.

코드 업데이트

기존 코드에서 Application을 참조하거나, 특정 이벤트나 메서드를 호출하거나, Open 이벤트에 의존하는 경우 코드에서 몇 가지 사항을 변경해야 합니다.

응용 프로그램 정규화

Visual Studio Tools for Office, Version 2003에서는 Application을 비정규화된 방식으로 사용하면 System.Windows.Forms.Application 형식이 참조되었습니다. Visual Studio Tools for Office에서는 Word 또는 Excel Application 개체가 참조됩니다. 즉, 같은 결과를 얻으려면 Application에 대한 모든 비정규화된 참조를 정규화된 네임스페이스 System.Windows.Forms.Application으로 업데이트해야 한다는 의미입니다. 예를 들어, 폼을 열기 위해 Application.Run(New Form1) 등의 코드를 사용할 경우 System.Windows.Forms.Application.Run(New Form1)으로 다시 작성해야 합니다.

이벤트 및 메서드 이름 바꾸기

Word 및 Excel은 개체 모델의 메서드와 동일한 이름을 갖는 일부 이벤트를 노출합니다. 예를 들어 Word 문서에는 Close 이벤트와 Close 메서드가 있습니다. Visual Studio Tools for Office 솔루션 코드에서는 멤버 중 하나에 다른 이름이 필요하므로 다음 멤버에 대한 기존 참조를 새 이름으로 바꿔야 합니다.

Word.Document

  • Close 이벤트의 경우 CloseEvent를 사용합니다.

  • Sync 이벤트의 경우 SyncEvent를 사용합니다.

Excel.Worksheet

Excel.Workbook

  • Activate 이벤트의 경우 ActivateEvent를 사용합니다.

  • Sync 이벤트의 경우 SyncEvent를 사용합니다.

Excel.Chart

  • Activate 이벤트의 경우 ActivateEvent를 사용합니다.

  • Select 이벤트의 경우 SelectEvent를 사용합니다.

Open 이벤트 처리

업그레이드된 프로젝트에서는 Excel 통합 문서의 경우 Open 이벤트 또는 Word 문서의 경우 Open 이벤트를 발생시키지 않습니다. 코드가 Open 이벤트에 의존하면 Excel 통합 문서의 경우 새 ThisWorkbook 클래스의 ThisWorkbook_Open() 이벤트 처리기로 코드를 이동하거나 Word 문서의 경우 새 ThisDocument 클래스의 ThisDocument_Open() 이벤트 처리기로 코드를 이동해야 합니다. 또는 원래 OfficeCodeBehind 클래스의 _Startup 메서드에서 Open 이벤트 처리기를 호출할 수 있습니다.

ActiveX 컨트롤을 관리되는 컨트롤로 바꾸기

문서나 통합 문서에 ActiveX 컨트롤을 사용한 경우에는 이를 삭제하고 Visual Studio 도구 상자의 관리되는 컨트롤로 바꿔야 합니다. 새 Visual Studio Tools for Office 프로젝트에서는 ActiveX 컨트롤에 제한이 있습니다. 예를 들어 데이터를 ActiveX 컨트롤에 바인딩할 수 없고 ActiveX 컨트롤을 대상으로 코딩하려면 특수한 interop 어셈블리를 사용해야 합니다. 따라서 새 Visual Studio Tools for Office 프로젝트에서는 ActiveX 컨트롤을 사용할 수 없습니다.

코드 리팩터링(C# 전용)

Visual Studio에서는 C# 코드를 구성하고 정렬하는 데 도움이 되는 도구를 제공하는데 이 프로세스를 리팩터링이라고 합니다. 코드 파일을 코드 편집기에서 열면 이러한 도구가 포함된 리팩터링 메뉴가 Visual Studio에 추가됩니다. 자세한 내용은 리팩터링을 참조하십시오.

참고 항목

작업

방법: Visual Studio Tools for Office에서 솔루션 업그레이드

개념

Office 솔루션의 어셈블리 개요

Office 솔루션 업그레이드 및 마이그레이션