Office 솔루션에서 런타임 오류 문제 해결

업데이트: 2010년 9월

Visual Studio에서 만든 Office 솔루션에서 런타임에 다음 작업을 수행할 때 문제가 발생할 수 있습니다.

  • 솔루션 설치

  • 솔루션 로드 또는 실행

  • 솔루션에서 특정 속성, 메서드 및 이벤트 사용

  • UI 사용자 지정

  • 컨트롤에 데이터 바인딩 및 데이터 캐싱

  • ServerDocument 클래스 사용

솔루션 설치

Microsoft Visual Studio Tools for Office Runtime에서는 Office 솔루션을 설치하거나 제거할 때 throw되는 모든 예외에 대한 메시지를 Windows의 이벤트 뷰어에 기록합니다. 이러한 메시지를 사용하여 설치 및 배포 문제를 해결할 수 있습니다. 자세한 내용은 Office 솔루션에 대한 이벤트 로깅을 참조하십시오.

Office 솔루션을 설치할 때 다음과 같은 오류가 발생할 수 있습니다.

COM 추가 기능 대화 상자를 사용하여 추가 기능을 설치할 수 없는 경우

Office 응용 프로그램에서 COM 추가 기능 대화 상자를 사용하여 Visual Studio의 Office 개발자 도구로 만든 추가 기능을 설치하려고 하면 다음 오류가 표시됩니다.

"your add-in name.dll은(는) Office 추가 기능으로 사용할 수 없습니다."

Visual Studio의 Office 개발자 도구를 사용하여 만든 추가 기능은 COM 추가 기능 대화 상자를 사용하여 설치할 수 없습니다. 대신 다음 작업 중 하나를 수행합니다.

  • 개발 컴퓨터에서 추가 기능을 실행하려는 경우 프로젝트를 빌드한 다음 Office 응용 프로그램을 시작합니다. 그러면 추가 기능이 자동으로 로드됩니다. 또는 Visual Studio의 디버그 메뉴에서 디버깅하지 않고 시작을 클릭합니다. 자세한 내용은 Office 솔루션 빌드 프로세스 개요를 참조하십시오.

  • 개발 컴퓨터에서 추가 기능을 디버깅하려는 경우 Visual Studio에서 F5 키를 누르거나 디버그 메뉴의 디버깅 시작을 클릭합니다. 자세한 내용은 응용 프로그램 수준 프로젝트의 디버깅을 참조하십시오.

  • 최종 사용자 컴퓨터에 추가 기능을 설치하려는 경우 ClickOnce 또는 Windows Installer를 사용하여 추가 기능을 배포합니다. 자세한 내용은 Office 솔루션 배포를 참조하십시오.

솔루션이 설치되지만 이벤트 뷰어에 FrameworkVersionMismatchException이 보고되는 경우

Visual Studio를 사용하여 만든 Office 솔루션을 설치할 때 Microsoft.VisualStudio.Tools.Applications.Deloyment.FrameworkVersionMismatchException이 throw되었음을 나타내는 오류가 이벤트 뷰어에 표시될 수 있습니다. 이 예외는 솔루션의 실제 오류를 나타내는 것이 아니므로 대개 무시해도 됩니다.

이 예외는 .NET Framework 3.5와 .NET Framework 4가 모두 설치된 컴퓨터에 .NET Framework 4를 대상으로 하는 Office 솔루션을 설치할 때 Microsoft Visual Studio Tools for Office Runtime에서 내부적으로 throw되고 catch됩니다. Microsoft Visual Studio Tools for Office Runtime에서는 이 예외를 사용하여 솔루션을 위해 로드할 CLR(공용 언어 런타임) 버전을 결정합니다.

솔루션 로드 또는 실행

Microsoft Visual Studio Tools for Office Runtime에서는 시작하는 동안 발생하는 모든 오류를 로그 파일에 쓰거나 메시지 상자에 각 오류를 표시할 수 있습니다. 기본적으로 이러한 옵션은 해제되어 있습니다. 환경 변수를 만들어 옵션을 설정할 수 있습니다. 자세한 내용은 문서 수준 프로젝트의 디버깅응용 프로그램 수준 프로젝트의 디버깅을 참조하십시오.

Office 솔루션을 로드하거나 실행할 때 다음과 같은 오류가 발생할 수 있습니다.

공용 언어 런타임 또는 Microsoft .NET Framework를 로드할 수 없는 경우

최종 사용자의 컴퓨터에는 솔루션의 대상으로 지정된 .NET Framework 버전이 있어야 합니다. Office 솔루션에서 대상으로 지정할 수 있는 .NET Framework 버전에 대한 자세한 내용은 Office 솔루션 디자인 및 만들기를 참조하십시오.

어셈블리를 찾을 수 없거나 로드할 수 없는 경우

이러한 문제 때문에 다음 오류 메시지가 표시될 수 있습니다.

"사용자 지정 어셈블리를 찾거나 로드할 수 없습니다. 문서를 편집하고 저장하는 것은 가능합니다. 자세한 내용은 관리자 또는 이 문서를 만든 이에게 문의하십시오."

이 오류를 해결하려면 다음과 같은 옵션을 사용해 보십시오.

  • 사용자가 어셈블리 위치에 액세스했는지 확인하고 명명된 어셈블리가 있는지 확인하십시오. 자세한 내용은 Office 솔루션의 어셈블리 개요를 참조하십시오.

  • 어셈블리가 사용 가능하면 Word 또는 Excel에서 .NET Framework 1.1을 명시적으로 로드한 사용자 지정 기능(예: 추가 기능, 스마트 태그 또는 스마트 문서)을 실행하고 있는지 확인합니다. 이 문제를 해결하려면 .NET Framework 1.1을 명시적으로 로드하는 모든 사용자 지정 기능을 비활성화합니다. 이 .NET Framework 버전은 이후 버전의 .NET Framework와 동일한 응용 프로그램 프로세스에서 로드할 수 없습니다. 자세한 내용은 In-Process Side-by-Side 실행을 참조하십시오.

    참고

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

  • 사용자 지정 어셈블리에서 처리되지 않은 예외로 인해 어셈블리가 로드되지 않고 있는지 확인합니다. 디버거를 공용 언어 런타임 예외가 발생할 때 프로세스가 중단되도록 설정하거나 옵션 대화 상자에서 예외가 AppDomain 또는 관리/네이티브 경계를 넘어서면 중단 옵션을 설정한 상태로 솔루션을 디버깅합니다. 자세한 내용은 방법: Office 프로젝트의 오류 처리를 참조하십시오.

  • Microsoft Visual Studio Tools for Office Runtime에서 자세한 오류 메시지를 표시하고 모든 작업을 로그 파일에 쓰도록 하는 환경 변수를 설정하여 추가 문제 해결 정보를 얻을 수 있습니다. 자세한 내용은 문서 수준 프로젝트의 디버깅응용 프로그램 수준 프로젝트의 디버깅을 참조하십시오.

추가 기능이 로드되지 않거나 사용할 수 없는 경우

응용 프로그램 수준 추가 기능이 제대로 로드되지 않는지 여부는 다음 몇 가지 방법으로 확인할 수 있습니다.

  • 추가 기능이 초기화되는 동안 Microsoft Office 응용 프로그램이 예기치 않게 종료되거나 오류가 발생하면 응용 프로그램에서 추가 기능을 사용하지 못할 수 있습니다. 자세한 내용은 방법: 비활성화된 추가 기능 다시 활성화를 참조하십시오.

  • Microsoft Office 응용 프로그램에서 .NET Framework 1.1을 명시적으로 로드한 추가 기능을 실행하고 있을 수 있습니다. 이 문제를 해결하려면 .NET Framework 1.1을 명시적으로 로드하는 모든 추가 기능을 비활성화합니다. 이 .NET Framework 버전은 이후 버전의 .NET Framework와 동일한 응용 프로그램 프로세스에서 로드할 수 없습니다. 자세한 내용은 In-Process Side-by-Side 실행을 참조하십시오.

  • Microsoft Visual Studio Tools for Office Runtime에서 자세한 오류 메시지를 표시하고 모든 작업을 로그 파일에 쓰도록 하는 환경 변수를 설정하여 추가 문제 해결 정보를 얻을 수 있습니다. 자세한 내용은 응용 프로그램 수준 프로젝트의 디버깅을 참조하십시오.

형식을 로드할 수 없는 경우

이러한 문제 때문에 다음 오류 메시지가 표시될 수 있습니다.

"assemblyname 어셈블리에서 projectname 형식을 로드할 수 없습니다."

Office 프로젝트의 코드를 난독 처리한 경우 이 메시지가 표시될 수 있습니다. 코드를 난독 처리하면 모든 클래스 이름이 변경됩니다. 그러나 원본 클래스 이름이 매니페스트에서 참조되므로 난독 처리기는 매니페스트를 변경하지 않습니다.

이 오류가 발생하지 않도록 하려면 이름을 바꾸지 않을 클래스를 포함하는 난독 처리기의 목록에 프로젝트의 생성된 클래스 이름을 추가합니다.

Office 문서를 오류 없이 열었지만 코드가 실행되지 않는 경우

코드가 실행되지 않는데 오류 메시지가 표시되지 않는 문제의 원인은 다음과 같습니다.

  • .NET Framework가 컴퓨터에 설치되지 않았거나 Office 설치 중에 Office PIA(주 interop 어셈블리)가 설치되지 않았기 때문에 Office PIA가 전역 어셈블리 캐시에 설치되지 않았습니다.

  • Word 문서 프로젝트가 동일한 컴퓨터의 Visual Studio에서 열립니다. Visual Studio를 닫고 문서를 다시 엽니다.

자세한 내용은 문서 수준 프로젝트의 디버깅을 참조하십시오.

솔루션에서 특정 속성, 메서드 및 이벤트 사용

Microsoft Office PIA(주 interop 어셈블리)와 Microsoft Visual Studio Tools for Office Runtime에서 특정 속성, 메서드 및 이벤트와 관련된 다음 문제가 발생할 수 있습니다.

Word에서 문서를 열 때 DocumentChange 이벤트가 발생하지 않는 경우

DocumentChange 이벤트는 활성 문서가 변경될 때 발생합니다. 이 이벤트는 문서를 열 때도 자주 발생합니다. 그러나 명령줄, Windows 탐색기 또는 Word의 파일 메뉴 등 여러 가지 방법을 사용하여 Word에서 문서를 열 수 있으므로 문서를 열 때마다 DocumentChange 이벤트가 발생하지는 않습니다. 열려 있는 활성 문서가 변경되는 경우에는 이 이벤트가 항상 발생합니다. 문서가 열려 있을 때 작업을 수행하려면 Startup 이벤트를 사용합니다.

Internet Explorer와 Excel에서 Excel 이벤트가 다르게 발생하는 경우

통합 문서가 Internet Explorer에서 호스팅되는 경우 통합 문서가 Excel에서 열릴 때와 다른 순서로 이벤트가 발생합니다. 또한 일부 이벤트는 두 번 발생합니다. 솔루션에 Internet Explorer가 포함되어 있으면 이벤트 시퀀스가 다를 경우 솔루션의 작업에 어떤 영향을 주는지 테스트하십시오.

템플릿을 사용하여 문서를 만들 때 New 이벤트가 발생하지 않는 경우

명령 프롬프트에서 Word 템플릿을 열어 새 문서를 만드는 경우에는 New 이벤트가 발생하도록 /z 스위치를 사용해야 합니다. 이때 /z 뒤에 공백이 포함되지 않도록 해야 합니다. 그렇지 않으면 템플릿을 기반으로 새 문서가 생성되는 대신 템플릿이 편집할 수 있는 상태로 열립니다. 예를 들어, winword.exe /z"mytemplate.dot"와 같이 지정합니다.

/z 스위치 뒤에 공백이 있으면 New 이벤트가 발생한다는 점을 제외하고는 /t 스위치를 사용할 때와 비슷한 효과가 나타납니다.

XML 워크시트를 열 때 Open 이벤트가 발생하지 않는 경우

기존의 비네이티브 워크시트(예: Excel XML 형식)를 기반으로 한 Excel 프로젝트의 경우 워크시트를 열 때 Open 이벤트가 발생하지 않습니다.

BeforeClose 메서드가 실행되지만 통합 문서가 열려 있는 경우

BeforeClose 이벤트 처리기가 호출된 후 최종 사용자가 통합 문서 닫기 작업을 취소하고 솔루션을 계속하여 사용할 경우 이러한 문제가 발생할 수 있습니다. 이러한 상황은 워크시트의 내용을 변경한 다음 통합 문서를 먼저 저장하지 않고 닫으려는 경우에 발생합니다. BeforeClose 이벤트 처리기가 호출된 후에는 닫기 작업을 취소할 수 있는 옵션이 포함된 대화 상자가 표시됩니다.

데이터베이스 연결을 종료하거나 기타 정리 작업을 수행하는 코드를 BeforeClose 이벤트 처리기에 추가한 경우에는 사용자가 솔루션을 계속 사용하는 동안 이 코드가 호출될 수도 있습니다.

다른 이름으로 저장 대화 상자의 Cancel 매개 변수를 설정하면 정확하지 않은 경고가 반환되거나 Word가 예기치 않게 종료되는 경우

DocumentBeforeSave 이벤트에 대한 이벤트 처리기에서 다른 이름으로 저장 대화 상자를 표시하고 Cancel 매개 변수를 false로 설정하면 응용 프로그램이 예기치 않게 종료될 수 있습니다. Cancel 매개 변수를 true로 설정하면 자동 저장 기능이 비활성화되었음을 나타내는 오류 메시지가 표시됩니다.

메서드를 닫으면 Word 또는 Excel이 예기치 않게 종료되는 경우

모덜리스 폼에서 문서 또는 통합 문서의 Close 메서드를 호출하명 응용 프로그램이 예기치 않게 종료될 수 있습니다. 열려 있는 모든 문서나 통합 문서가 닫히고 데이터가 손실될 수 있습니다. Microsoft Office Outlook에서 Word를 전자 메일 편집기로 사용하는 경우에는 열려 있는 모든 전자 메일 메시지도 닫힐 수 있습니다. AppDomain.DomainUnload 이벤트를 처리하는 동안 Windows Forms 또는 메시지 상자를 표시하는 경우에도 이러한 문제가 발생할 수 있습니다.

이 문제를 해결하려면 모덜리스 폼이나 모델리스 폼에 대한 이벤트에서 Close 메서드를 호출하지 마십시오. 대신 다음 절차를 사용하십시오.

  • 폼에서 문서를 닫아야 할 경우 모달 폼을 사용합니다. 예를 들면 Show 대신 ShowDialog를 사용합니다.

  • 모덜리스 폼을 사용해야 하는 경우 문서나 통합 문서를 닫기 전에 모덜리스 폼이 닫혀 있는지와 폼 참조가 완전히 소멸되어 있는지 확인합니다. 다음 코드에서는 이러한 예제를 보여 줍니다. 이 코드를 사용하려면 Word용 문서 수준 프로젝트의 ThisDocument 클래스에서 이 코드를 실행하십시오.

    Dim form1 As SampleForm
    
    Sub OpenForm()
        form1 = New SampleForm
        form1.Show()  ' Show the form modelessly.
    End Sub
    
    Sub ForceShutdown()
    
        ' Completely close the form if it is still running.
        ' Note that hiding the form might not work by itself.
    
        If (Not form1 Is Nothing) Then
            form1.Close()
            form1.Dispose()
            form1 = Nothing
        End If
    
        Me.Close()
    End Sub
    
    SampleForm form1;
    
    private void OpenForm()
    {
        form1 = new SampleForm();
        form1.Show();  // Show form modelessly.
    }
    
    private void ForceShutdown()
    {
        // Completely close the form if it is still running.
        // Note that hiding the form might not work by itself.
    
        if (form1 != null)
        {
            form1.Close();
            form1.Dispose();
            form1 = null;
        }
        object saveChanges = Word.WdSaveOptions.wdSaveChanges; 
        this.Close(ref saveChanges, ref missing, ref missing);
    }
    

C#에서 missing 매개 변수를 전달하는 방법에 대한 자세한 내용은 Office 솔루션의 선택적 매개 변수를 참조하십시오.

Excel 호스트 컨트롤을 메서드에 전달하면 InvalidCastException이 throw되는 경우

Excel의 일부 메서드와 속성의 경우 해당 메서드와 속성에 네이티브 Office 개체를 전달해야 하는데 .NET Framework 3.5를 대상으로 하는 프로젝트에서 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute 특성을 false로 설정하고 네이티브 Office 개체를 기반으로 하는 호스트 컨트롤을 전달하는 경우 InvalidCastException이 throw됩니다. 호스트 컨트롤의 InnerObject 속성을 사용하여 이러한 메서드와 속성에 내부 네이티브 Office 개체를 전달할 수 있습니다. Excel의 지역화 문제에 대한 자세한 내용은 여러 가지 국가별 설정으로 Excel의 데이터 서식 지정을 참조하십시오.

UI 사용자 지정

Office 솔루션의 특정 UI 사용자 지정 형식과 관련하여 다음과 같은 오류가 발생할 수 있습니다.

Excel 워크시트 창을 분할하면 Windows Forms 컨트롤이 예기치 않게 작동하는 경우

Windows Forms 컨트롤이 들어 있는 워크시트 창을 분할하면 해당 컨트롤이 두 창에서 비슷하게 작동하지 않을 수 있습니다. 예를 들어 코드를 실행하여 워크시트에서 TextBoxBackColor 속성을 변경할 경우 변경 내용이 하나의 창에만 표시될 수 있습니다.

Outlook 추가 기능에 사용자 지정 속성 페이지를 추가할 수 없는 경우

Outlook 추가 기능에서 Outlook의 옵션 대화 상자 또는 Outlook 폴더의 속성 대화 상자에 대한 사용자 지정 속성 페이지를 만드는 경우 사용자 지정 속성 페이지를 명시적으로 COM에 표시되게 해야 합니다. 기본적으로는 어셈블리가 COM에 노출되지 않습니다. 그렇지 않으면 추가 기능에서 사용자 지정 속성 페이지를 만들지 못해 추가 기능을 디버깅할 때 COMException이 발생할 수도 있습니다.

다음과 같은 두 가지 방법으로 사용자 지정 속성 페이지를 COM에 노출되게 할 수 있습니다.

  • 프로젝트의 사용자 지정 속성 페이지를 구현하는 클래스에 ComVisibleAttribute를 추가합니다. 클래스에 특성을 적용하는 방법에 대한 정보는 특성 적용을 참조하십시오.

  • Visual Studio를 사용하여 전체 추가 기능 어셈블리를 COM에 노출되게 합니다.

    Visual Studio를 사용하여 추가 기능 어셈블리를 COM에 노출되게 하려면

    1. Visual Studio의 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.

    2. 응용 프로그램 탭을 클릭합니다.

    3. 어셈블리 정보 단추를 클릭합니다.

    4. 어셈블리를 COM에 노출 확인란을 선택합니다.

    5. 확인을 클릭합니다.

컨트롤에 데이터 바인딩 및 데이터 캐싱

데이터 바인딩이나 캐시된 데이터를 사용하는 Office 솔루션에서는 다음과 같은 오류가 발생할 수 있습니다.

모달 대화 상자를 표시하면 ListObject의 데이터 바인딩이 실패하는 경우

ListObject에 바인딩되어 있는 데이터 집합이 업데이트되는 동안 Excel에서 모달 대화 상자를 표시하면 ListObject의 데이터 바인딩이 실패합니다. ListObject에서 데이터 바인딩이 손실되면 DataBindingFailure 이벤트가 발생합니다. ListObject를 데이터 소스에 다시 바인딩하려면 DataBindingFailure 이벤트를 처리하고 SetDataBinding 메서드를 호출합니다.

캐시된 Visual Basic 데이터 집합 이름이 데이터 캐시에 제대로 표시되지 않는 경우

Visual Basic에서 Cached 및 WithEvents로 표시하여 만든 DataSet 개체와 CacheInDocument 속성을 True로 설정하여 데이터 소스 창이나 도구 상자에서 끌어 놓은 DataSet 개체의 캐시 이름 앞에는 밑줄(_)이 추가됩니다. 예를 들어 DataSet를 만들고 그 이름을 Customers로 지정한 경우 캐시에서 CachedDataItem 이름은 _Customers가 됩니다. ServerDocument를 사용하여 이 캐시된 항목에 액세스하는 경우 Customers가 아닌 _Customers를 지정해야 합니다.

ServerDocument 클래스 사용

Microsoft.VisualStudio.Tools.Applications.ServerDocument 클래스를 사용하는 Office 솔루션에서는 다음과 같은 오류가 발생할 수 있습니다.

Visual Studio 2010 Tools for Office Runtime만 설치된 컴퓨터에서 ServerDocument를 사용하는 레거시 응용 프로그램을 실행할 수 없는 경우

Visual Studio 2010 Tools for Office Runtime만 설치된 컴퓨터에서 Visual Studio Tools for Office system(버전 3.0 Runtime)의 Microsoft.VisualStudio.Tools.Applications.ServerDocument 클래스를 사용하는 응용 프로그램을 실행하려고 하면 응용 프로그램에 예기치 않은 문제가 발생할 수 있습니다. 응용 프로그램을 실행하려면 컴퓨터에 Visual Studio Tools for Office system(버전 3.0 Runtime)을 설치합니다. 두 버전의 런타임을 모두 동일한 컴퓨터에 설치할 수 있습니다.

참고 항목

작업

Office 솔루션에서 디자인 타임 오류 문제 해결

Office 솔루션 보안 문제 해결

개념

Office 솔루션 배포 문제 해결

기타 리소스

Office 솔루션 문제 해결

변경 기록

날짜

변경 내용

이유

2010년 9월

설치 및 로드 오류 보기에 대한 정보를 추가했습니다.

향상된 기능 관련 정보

2010년 5월

FrameworkVersionMismatchException에 대한 단원을 추가했습니다.

향상된 기능 관련 정보