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

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

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

Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute가 .NET Framework 4 이상을 대상으로 하는 솔루션에 사용되는 Visual Studio 2010 Tools for Office 런타임 부분에서 제거되었습니다. .NET Framework 4 이상의 CLR(공용 언어 런타임)은 로캘 ID 1033을 항상 Excel 개체 모델에 전달하며 더 이상 이 특성을 사용하여 이 동작을 사용하지 않을 수 없습니다. 자세한 내용은 Excel 솔루션 세계화 및 지역화를 참조하세요.

ExcelLocale1033Attribute를 제거하려면

  1. Visual Studio에서 프로젝트를 열고 솔루션 탐색기를 엽니다.

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

    참고 항목

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

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

    [assembly: ExcelLocale1033Proxy(true)]
    

ExcelLocal1033Proxy 클래스에 대한 참조 제거

Microsoft Visual Studio 2005 Tools for the Microsoft Office System을 사용하여 만든 프로젝트는 Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy 클래스를 사용하여 Excel Application 개체를 인스턴스화합니다. 이 클래스는 .NET Framework 4 이상을 대상으로 하는 솔루션에 사용되는 Visual Studio 2010 Tools for Office 런타임 부분에서 제거되었습니다. 따라서 이 클래스를 참조하는 코드 줄을 제거하거나 주석으로 처리해야 합니다.

ExcelLocal1033Proxy 클래스에 대한 참조를 제거하려면

  1. Visual Studio에서 프로젝트를 열고 솔루션 탐색기를 엽니다.

  2. 솔루션 탐색기에서 ThisAddin.cs(C#의 경우) 또는 ThisAddin.vb(Visual Basic의 경우)에 대한 바로 가기 메뉴를 연 다음, 코드 보기를 선택합니다.

  3. 코드 편집기의 VSTO generated code 영역에서 다음 코드 줄을 주석으로 처리합니다.

    this.Application = (Excel.Application)Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Wrap(typeof(Excel.Application), this.Application);
    
    

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

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

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

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

  • Document, Workbook, Worksheet또는 ListObject 개체에서 확장 메서드로 이러한 메서드에 계속 액세스할 수 있습니다. 그러나 이제 Globals.Factory 속성에 의해 반환된 개체를 이러한 메서드에 전달해야 합니다.

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

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

    자세한 내용은 런타임 시 VSTO 추가 기능에서 Word 문서 및 Excel 통합 문서 확장을 참조하세요.

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

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

  • ThisDocument: Document

  • ThisWorkbook: Workbook

  • Sheetn: Worksheet

  • Chartn: ChartSheet

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

  • ThisDocument: DocumentBase

  • ThisWorkbook: WorkbookBase

  • Sheetn: WorksheetBase

  • Chartn: ChartSheetBase

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

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

private void DoSomethingToSheet(Microsoft.Office.Tools.Excel.Worksheet worksheet)
{
    // Do something to the worksheet object.
}

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

  • 프로젝트에서 DoSomethingToSheet 개체의 Base 속성을 전달하도록 WorksheetBase 메서드를 호출하는 코드를 수정합니다. 이 속성은 Worksheet 개체를 반환합니다.

    DoSomethingToSheet(Globals.Sheet1.Base);
    
  • 대신 DoSomethingToSheet 개체를 예상하도록 WorksheetBase 메서드 매개 변수를 수정합니다.

    private void DoSomethingToSheet (Microsoft.Office.Tools.Excel.WorksheetBase worksheet)
    {
        // Do something to the worksheet object.
    }
    

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

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

.NET Framework 3.5를 대상으로 하는 프로젝트에서 Windows Forms 컨트롤을 추가하는 메서드(예: AddButton 메서드)는 ControlCollectionControlCollection 클래스에서 정의됩니다.

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

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

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

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

다음 표에는 .NET Framework 4 이상을 대상으로 하는 프로젝트의 Word 콘텐츠 컨트롤 이벤트 및 이러한 이벤트와 연결된 대리자가 나와 있습니다.

이벤트 .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 이상을 대상으로 하는 프로젝트에서 이러한 클래스는 ControlSiteControlSite 인터페이스로 대체되었습니다. ControlSiteControlSite를 대신 참조하도록 Microsoft.Office.Tools.Excel.OLEObjectMicrosoft.Office.Tools.Word.OLEControl를 참조하는 코드를 수정해야 합니다. 새 이름을 제외하면 이러한 컨트롤은 .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) 속성이 제거되었습니다. 문서나 워크시트에 지정된 컨트롤이 포함되어 있는지 여부를 확인하려면 Controls 또는 Controls 컬렉션의 Contains(System.Object) 메서드를 대신 사용합니다.

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

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

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

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