다음을 통해 공유


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

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

  • GetVstoObject 및 HasVstoObject 메서드

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

  • 문서의 Windows Forms 컨트롤

  • Word 콘텐츠 컨트롤 이벤트

  • OLEObject 및 OLEControl 클래스

  • Controls.Item(개체) 속성

  • CollectionBase에서 파생되는 컬렉션

도 제거 해야 합니다의 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute 에 대한 참조가 있는 Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy 로 대상이 변경 된 Excel 프로젝트에서 클래스의 .NET Framework 4 또는 .NET Framework 4.5. Visual Studio 클래스 참조 또는이 특성을 제거 되지 않습니다.

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

Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute Visual Studio 2010 도구 부분에서 대상으로 하는 솔루션에 사용 되는 Office 런타임 제거 되었습니다의 .NET Framework 4 또는 .NET Framework 4.5.공용 언어 런타임 (CLR)은 .NET Framework 4 , .NET Framework 4.5 항상 가공 로캘 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)]
    

ExcelLocal1033Proxy 클래스에 대한 참조를 제거합니다.

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

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

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

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

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

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

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 또는 .NET Framework 4.5, 다음 방법 중 하나를 이러한 메서드에 액세스 하도록 코드를 수정 해야 합니다.

  • 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 통합 문서 확장을 참조하십시오.

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

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

대상으로 하는 프로젝트의 .NET Framework 4 또는 .NET Framework 4.5, 형식에는 Microsoft Visual Studio Tools for Office Runtime 클래스가 아닌 인터페이스는 위에 나열 된.대상으로 하는 프로젝트에서 생성 된 클래스의 .NET Framework 4 또는 .NET Framework 4.5 의 다음과 같은 새 클래스에서 파생 되는 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 또는 .NET Framework 4.5, 코드에 다음과 같은 변경 중 하나를 수행 해야 합니다.

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

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

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

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

Word 콘텐츠 컨트롤 이벤트와 대리자는 대상 프로젝트에 관련 된 다음 표에 나와 있는 .NET Framework 4 또는 .NET Framework 4.5.

Event

대리자를 사용 하려면 .NET Framework 4 및 .NET Framework 4.5 프로젝트

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 또는 .NET Framework 4.5, 이러한 클래스 교체 완료는 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 또는 .NET Framework 4.5, 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 또는 .NET Framework 4.5, 이러한 컬렉션 형식에서 파생 되지 않은 인터페이스를 이제는 CollectionBase.이러한 컬렉션 형식에서 Capacity, ListInnerList와 같은 일부 멤버는 더 이상 사용할 수 없습니다.

참고 항목

개념

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

콘텐츠 컨트롤

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

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

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