.NET Framework 4로 마이그레이션하는 Excel 및 Word 프로젝트 업데이트

업데이트: 2010년 5월

다음과 같은 기능을 사용하는 Excel 또는 Word 프로젝트가 있는 경우 대상 프레임워크를 .NET Framework 4로 변경하면 코드를 수정해야 합니다.

  • 스마트 태그

  • GetVstoObject 및 HasVstoObject 메서드

  • 문서 수준 프로젝트의 생성된 클래스

  • 문서의 Windows Forms 컨트롤

  • Word 콘텐츠 컨트롤 이벤트

  • OLEObject 및 OLEControl 클래스

  • Controls.Item(개체) 속성

  • CollectionBase에서 파생되는 컬렉션

대상이 .NET Framework 4로 변경된 Excel 프로젝트에서 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute도 제거해야 합니다. 이 특성은 자동으로 제거되지 않습니다.

Excel 프로젝트에서 ExcelLocale1033 특성 제거

.NET Framework 4를 대상으로 하는 솔루션에 사용되는 Visual Studio 2010 Tools for Office Runtime의 일부에서 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute가 제거되었습니다. .NET Framework 4의 CLR(공용 언어 런타임)은 항상 로캘 ID 1033을 Excel 개체 모델에 전달하므로 더 이상 이 특성을 사용하여 이 동작을 비활성화할 수 없습니다. 자세한 내용은 여러 가지 국가별 설정으로 Excel의 데이터 서식 지정을 참조하십시오.

ExcelLocale1033Attribute를 제거하려면

  1. Visual Studio에서 프로젝트가 열려 있으면 솔루션 탐색기를 엽니다.

  2. 속성 노드(C#의 경우) 또는 내 프로젝트 노드(Visual Basic의 경우)에서 AssemblyInfo 코드 파일을 두 번 클릭하여 코드 편집기에서 엽니다.

    참고

    Visual Basic 프로젝트에서 AssemblyInfo 코드 파일을 보려면 솔루션 탐색기에서 모든 파일 표시 단추를 클릭해야 합니다.

  3. Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute를 찾아 파일에서 제거하거나 주석으로 처리합니다.

    <Assembly: ExcelLocale1033Proxy(True)>
    
    [assembly: ExcelLocale1033Proxy(true)]
    

스마트 태그를 만드는 코드 업데이트

스마트 태그를 만드는 Excel 또는 Word 프로젝트가 있는 경우 대상 프레임워크를 변경하면 다음과 같이 코드를 변경해야 합니다.

  • 스마트 태그와 작업 개체를 만드는 코드를 수정합니다.

  • 사용자 지정 인식기를 사용하여 스마트 태그 클래스를 정의하는 코드를 수정합니다.

참고

Excel 2010 및 Word 2010에서 스마트 태그는 더 이상 사용되지 않습니다. 자세한 내용은 스마트 태그 개요를 참조하십시오.

자세한 내용은 아래 지침을 참조하십시오.

스마트 태그 및 작업 개체 만들기

코드에서 스마트 태그와 작업 개체를 만드는 방법을 수정해야 합니다. .NET Framework 3.5를 대상으로 하는 프로젝트에서 스마트 태그와 작업 형식은 직접 인스턴스화할 수 있는 클래스입니다. .NET Framework 4를 대상으로 하는 프로젝트에서 이러한 형식은 직접 인스턴스화할 수 없는 인터페이스입니다.

프로젝트의 대상 프레임워크를 .NET Framework 4로 변경한 경우 프로젝트의 Globals.Factory 속성이 제공하는 메서드를 사용하여 스마트 태그와 작업 개체를 만들어야 합니다. 자세한 내용은 스마트 태그 아키텍처를 참조하십시오.

다음 표에서는 스마트 태그와 작업 형식 및 .NET Framework 4를 대상으로 하는 프로젝트에서 형식의 인스턴스를 만드는 데 사용할 메서드를 보여 줍니다.

스마트 태그 및 작업 형식

.NET Framework 4 프로젝트에서 사용할 팩터리 메서드

Microsoft.Office.Tools.Excel.Action

Microsoft.Office.Tools.Excel.Factory 클래스의 CreateAction 메서드

Microsoft.Office.Tools.Excel.SmartTag

Microsoft.Office.Tools.Excel.Factory 클래스의 CreateSmartTag 메서드

Microsoft.Office.Tools.Word.Action

Microsoft.Office.Tools.Word.Factory 클래스의 CreateAction 메서드

Microsoft.Office.Tools.Word.SmartTag

Microsoft.Office.Tools.Word.Factory 클래스의 CreateSmartTag 메서드

사용자 지정 인식기를 사용하여 스마트 태그 클래스 정의

사용자 지정 인식기를 사용하여 사용자 고유의 스마트 태그 클래스를 정의하는 경우 코드를 수정해야 합니다. .NET Framework 3.5를 대상으로 하는 프로젝트에서는 Microsoft.Office.Tools.Word.SmartTag 또는 Microsoft.Office.Tools.Excel.SmartTag 클래스에서 클래스를 파생해야 합니다. .NET Framework 4를 대상으로 하는 프로젝트에서는 Microsoft.Office.Tools.Word.ISmartTagExtension 또는 Microsoft.Office.Tools.Excel.ISmartTagExtension 인터페이스를 구현하는 클래스를 대신 정의해야 합니다.

자세한 내용은 스마트 태그 아키텍처를 참조하십시오.

GetVstoObject 및 HasVstoObject 메서드를 사용하는 코드 업데이트

.NET Framework 3.5를 대상으로 하는 프로젝트에서는 프로젝트의 네이티브 개체인 Microsoft.Office.Interop.Word.Document, Microsoft.Office.Interop.Excel.Workbook, Microsoft.Office.Interop.Excel.Worksheet 또는 Microsoft.Office.Interop.Excel.ListObject 중 하나에 대해 GetVstoObject 또는 HasVstoObject 메서드를 확장 메서드로 사용할 수 있습니다. 이러한 메서드를 호출할 때는 매개 변수를 전달할 필요가 없습니다. 다음 코드 예제에서는 .NET Framework 3.5를 대상으로 하는 Word 추가 기능에서 GetVstoObject 메서드를 만드는 방법을 보여 줍니다.

Dim vstoDocument as Microsoft.Office.Tools.Word.Document = _
    Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject()
Microsoft.Office.Tools.Word.Document vstoDocument = 
    Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject();

.NET Framework 4를 대상으로 하는 프로젝트에서는 다음 방법 중 하나를 사용하여 이러한 메서드에 액세스하도록 코드를 수정해야 합니다.

  • Microsoft.Office.Interop.Word.Document, Microsoft.Office.Interop.Excel.Workbook, Microsoft.Office.Interop.Excel.Worksheet 또는 Microsoft.Office.Interop.Excel.ListObject 개체에 대해 이러한 메서드를 계속해서 확장 메서드로 사용할 수 있습니다. 그러나 이제 Globals.Factory 속성에서 반환하는 개체를 이 메서드에 전달해야 합니다.

    Dim vstoDocument as Microsoft.Office.Tools.Word.Document = _
        Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject(Globals.Factory)
    
    Microsoft.Office.Tools.Word.Document vstoDocument = 
        Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject(Globals.Factory);
    
  • 또는 Globals.Factory 속성에서 반환하는 개체의 이러한 메서드에 액세스할 수 있습니다. 이 방법으로 이러한 메서드에 액세스하면 확장할 네이티브 개체를 메서드에 전달해야 합니다.

    Dim vstoDocument as Microsoft.Office.Tools.Word.Document = _
        Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveDocument)
    
    Microsoft.Office.Tools.Word.Document vstoDocument = 
        Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveDocument);
    

자세한 내용은 런타임에 응용 프로그램 수준 추가 기능의 Word 문서 및 Excel 통합 문서 확장문서 수준 사용자 지정의 네이티브 Office 개체에서 확장 개체 가져오기를 참조하십시오.

문서 수준 프로젝트에서 생성된 클래스의 인스턴스를 사용하는 코드 업데이트

.NET Framework 3.5를 대상으로 하는 문서 수준 프로젝트에서는 프로젝트의 생성된 클래스가 Microsoft Visual Studio Tools for Office Runtime의 다음 클래스에서 파생됩니다.

.NET Framework 4를 대상으로 하는 프로젝트에서 위에 나열된 Microsoft Visual Studio Tools for Office Runtime의 형식은 클래스가 아닌 인터페이스입니다. .NET Framework 4를 대상으로 하는 프로젝트의 생성된 클래스는 Microsoft Visual Studio Tools for Office Runtime의 다음과 같은 새 클래스에서 파생됩니다.

프로젝트의 코드가 생성된 클래스 중 하나의 인스턴스를 코드가 파생되는 기본 클래스로 참조하는 경우 코드를 수정해야 합니다.

예를 들어 .NET Framework 3.5를 대상으로 하는 Excel 통합 문서 프로젝트에서 프로젝트의 생성된 Sheetn 클래스의 인스턴스에 대해 작업을 수행하는 도우미 메서드가 있을 수 있습니다.

Private Sub DoSomethingToSheet(ByVal worksheet As Microsoft.Office.Tools.Excel.Worksheet)
    ' Do something to the worksheet object.
End Sub
private void DoSomethingToSheet(Microsoft.Office.Tools.Excel.Worksheet worksheet)
{
    // Do something to the worksheet object.
}

프로젝트 대상을 .NET Framework 4로 변경하면 다음 중 하나와 같이 코드를 변경해야 합니다.

  • DoSomethingToSheet 메서드를 호출하여 프로젝트에 있는 Microsoft.Office.Tools.Excel.WorksheetBase 개체의 Base 속성을 전달하는 모든 코드를 수정합니다. 이 속성은 Microsoft.Office.Tools.Excel.Worksheet 개체를 반환합니다.

    DoSomethingToSheet(Globals.Sheet1.Base)
    
    DoSomethingToSheet(Globals.Sheet1.Base);
    
  • Microsoft.Office.Tools.Excel.WorksheetBase 개체를 대신 사용하도록 DoSomethingToSheet 메서드 매개 변수를 수정합니다.

    Private Sub DoSomethingToSheet(ByVal worksheet As Microsoft.Office.Tools.Excel.WorksheetBase)
        ' Do something to the worksheet object.
    End Sub
    
    private void DoSomethingToSheet (Microsoft.Office.Tools.Excel.WorksheetBase worksheet)
    {
        // Do something to the worksheet object.
    }
    

문서에서 Windows Forms 컨트롤을 사용하는 코드 업데이트

Controls 속성을 사용하여 문서 또는 워크시트에 Windows Forms 컨트롤을 프로그래밍 방식으로 추가하는 코드 파일의 맨 위에 Microsoft.Office.Tools.Excel 또는 Microsoft.Office.Tools.Word 네임스페이스에 대한 using(C#) 또는 Imports(Visual Basic) 문을 추가해야 합니다.

.NET Framework 3.5를 대상으로 하는 프로젝트에서는 Windows Forms 컨트롤을 추가하는 메서드(예: AddButton 메서드)가 Microsoft.Office.Tools.Excel.ControlCollectionMicrosoft.Office.Tools.Word.ControlCollection 클래스에 정의되어 있습니다.

.NET Framework 4를 대상으로 하는 프로젝트에서 이러한 메서드는 Controls 속성에 사용할 수 있는 확장 메서드입니다. 이러한 확장 메서드를 사용하려면 메서드를 사용하는 코드 파일에 Microsoft.Office.Tools.Excel 또는 Microsoft.Office.Tools.Word 네임스페이스에 대한 using or Imports 문이 있어야 합니다. 이 문은 .NET Framework 4를 대상으로 하는 새 프로젝트에 자동으로 생성됩니다. 그러나 .NET Framework 3.5를 대상으로 하는 프로젝트에는 이 문이 자동으로 추가되지 않으므로 프로젝트 대상을 변경할 때 추가해야 합니다.

자세한 내용은 런타임에 Office 문서에 컨트롤 추가를 참조하십시오.

Word 콘텐츠 컨트롤 이벤트를 처리하는 코드 업데이트

.NET Framework 3.5를 대상으로 하는 프로젝트에서는 Word 콘텐츠 컨트롤의 이벤트가 제네릭 EventHandler<TEventArgs> 대리자에 의해 처리됩니다. .NET Framework 4를 대상으로 하는 프로젝트에서는 이러한 이벤트가 다른 대리자에 의해 처리됩니다.

다음 표에서는 Word 콘텐츠 컨트롤 이벤트 및 .NET Framework 4를 대상으로 하는 프로젝트에서 해당 이벤트와 연결된 대리자를 보여 줍니다.

Event

.NET Framework 4 프로젝트에서 사용할 대리자

Added

ContentControlAddedEventHandler

ContentUpdating

ContentControlContentUpdatingEventHandler

Deleting

ContentControlDeletingEventHandler

Entering

ContentControlEnteringEventHandler

Exiting

ContentControlExitingEventHandler

StoreUpdating

ContentControlStoreUpdatingEventHandler

OLEObject 및 OLEControl 클래스를 사용하는 코드 업데이트

.NET Framework 3.5를 대상으로 하는 프로젝트에서는 Microsoft.Office.Tools.Excel.OLEObjectMicrosoft.Office.Tools.Word.OLEControl 클래스를 사용하여 문서나 워크시트에 사용자 지정 컨트롤(예: Windows Forms 사용자 컨트롤)을 추가할 수 있습니다.

.NET Framework 4를 대상으로 하는 프로젝트에서는 이러한 클래스가 Microsoft.Office.Tools.Excel.ControlSiteMicrosoft.Office.Tools.Word.ControlSite 인터페이스로 바뀌었습니다. Microsoft.Office.Tools.Excel.OLEObjectMicrosoft.Office.Tools.Word.OLEControl을 참조하는 코드를 대신 Microsoft.Office.Tools.Excel.ControlSiteMicrosoft.Office.Tools.Word.ControlSite를 참조하도록 수정해야 합니다. 이러한 컨트롤은 새로운 이름을 제외하고는 .NET Framework 3.5를 대상으로 하는 프로젝트에서와 동일한 방식으로 동작합니다.

자세한 내용은 런타임에 Office 문서에 컨트롤 추가를 참조하십시오.

Controls.Item(Object) 속성을 사용하는 코드 업데이트

.NET Framework 3.5를 대상으로 하는 프로젝트에서는 Microsoft.Office.Tools.Word.Document.Controls 또는 Microsoft.Office.Tools.Excel.Worksheet.Controls 컬렉션의 Item(Object) 속성을 사용하여 문서나 워크시트에 지정된 컨트롤이 있는지 여부를 확인할 수 있습니다.

.NET Framework 4를 대상으로 하는 프로젝트에서는 이러한 컬렉션에서 Item(Object) 속성이 제거되었습니다. 문서나 워크시트에 지정된 컨트롤이 포함되어 있는지 여부를 확인하려면 Document.Controls 또는 Worksheet.Controls 컬렉션의 Contains(System.Object) 메서드를 대신 사용합니다.

문서 및 워크시트의 Controls 컬렉션에 대한 자세한 내용은 런타임에 Office 문서에 컨트롤 추가를 참조하십시오.

CollectionBase에서 파생된 컬렉션을 사용하는 코드 업데이트

.NET Framework 3.5를 대상으로 하는 프로젝트에서 Microsoft Visual Studio Tools for Office Runtime의 일부 컬렉션 형식은 Microsoft.Office.Tools.SmartTagCollection, Microsoft.Office.Tools.Excel.ControlCollectionMicrosoft.Office.Tools.Word.ControlCollection과 같은 CollectionBase 클래스에서 파생됩니다.

.NET Framework 4를 대상으로 하는 프로젝트에서는 이제 이러한 컬렉션 형식이 CollectionBase에서 파생되지 않는 인터페이스입니다. 이러한 컬렉션 형식에서 Capacity, ListInnerList와 같은 일부 멤버는 더 이상 사용할 수 없습니다.

참고 항목

개념

.NET Framework 4로 Office 솔루션 마이그레이션

스마트 태그 아키텍처

콘텐츠 컨트롤

런타임에 응용 프로그램 수준 추가 기능의 Word 문서 및 Excel 통합 문서 확장

문서 수준 사용자 지정의 네이티브 Office 개체에서 확장 개체 가져오기

런타임에 Office 문서에 컨트롤 추가

Office 프로젝트의 개체에 전역 액세스

변경 기록

날짜

변경 내용

이유

2010년 5월

Excel 프로젝트에서 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute를 제거하는 방법에 대한 단원을 추가했습니다.

향상된 기능 관련 정보