Share via


Office 솔루션의 문제 해결

적용 대상: Visual Studio

이 문서에서는 Visual Studio에서 Office 솔루션을 개발하는 동안 다른 작업을 수행할 때 발생할 수 있는 문제를 해결하는 방법을 소개합니다.

프로젝트를 만들고, 업그레이드하고, 열 때 발생하는 문제

Office 프로젝트를 만들거나 열 때 다음과 같은 문제가 발생할 수 있습니다.

문제 1: 프로젝트를 만들 수 없습니다.

Office 프로젝트를 만들거나 열려고 할 때 오류가 발생하지만 Visual Studio에 원인을 파악할 수 있는 충분한 정보가 없는 경우 프로젝트를 닫고 Visual Studio를 종료한 후 다시 시작해 보세요.

문서 수준 프로젝트를 만들려는 경우 새 프로젝트의 문서와 이름이 같은 다른 문서가 Excel 또는 Word 이미 열려 있을 수 있습니다. Excel 또는 Word 다른 모든 인스턴스가 닫혀 있는지 확인합니다.

문제 2: 기존 프로젝트의 문서를 기반으로 새 프로젝트를 만들 때 컨트롤 속성이 손실됩니다.

기존 프로젝트의 문서를 기반으로 새 Office 프로젝트를 만드는 경우 문서에 있는 컨트롤의 속성이 새 프로젝트에 복사되지 않습니다. 기존 컨트롤의 속성을 수동으로 다시 설정합니다. 또는 새 프로젝트를 만드는 대신 기존 프로젝트의 복사본을 만들거나 기존 프로젝트를 디자이너의 새 솔루션에 로드하고 기존 문서의 컨트롤을 복사하여 새 문서에 붙여넣어 컨트롤 속성을 유지할 수 있습니다.

문제 3: 기존 통합 문서를 기반으로 Excel 통합 문서 프로젝트를 만들 때 발생하는 오류

기존 통합 문서를 기반으로 새 Excel 통합 문서 프로젝트를 만드는 경우 다음 오류의 조합이 표시될 수 있습니다.

  • Excel: "개인 정보 경고: 이 문서에는 매크로, ActiveX 컨트롤, XML 확장 팩 정보 또는 웹 구성 요소가 포함되어 있습니다. 여기에는 문서 검사기에서 제거할 수 없는 개인 정보가 포함될 수 있습니다."
  • Visual Studio에서: "Designer 올바르게 로드하지 못했습니다."

이러한 오류는 문서 검사기를 사용하여 개인 정보가 제거된 통합 문서를 기반으로 하는 프로젝트를 만들려고 시도할 수 있습니다. 이 문제를 방지하려면 프로젝트를 만들기 전에 다음 단계를 수행합니다.

  1. Excel에서 통합 문서를 엽니다.
  2. Excel에서 보안 센터를 엽니다.
  3. 개인 정보 옵션 탭의 저장 검사 파일 속성에서 개인 정보 제거 상자의 선택을 취소합니다.
  4. 통합 문서를 저장하고 Excel을 닫습니다.

문제 4: 마이그레이션 후 프로젝트를 열 수 없습니다.

Office 솔루션을 Microsoft Office 2010으로 마이그레이션한 후에는 2007 Microsoft Office 시스템만 설치된 개발 컴퓨터에서 프로젝트를 열 수 없습니다. 다음과 같은 오류가 표시 될 수 있습니다.

  • "솔루션에서 하나 이상의 프로젝트가 올바르게 로드되지 않았습니다. 자세한 내용은 출력 창을 참조하세요."
  • "이 프로젝트 유형과 연결된 애플리케이션이 이 컴퓨터에 설치되어 있지 않으므로 프로젝트를 만들 수 없습니다. 이 프로젝트 유형과 연결된 Microsoft Office 애플리케이션을 설치해야 합니다."

이 문제를 resolve .vbproj 또는 .csproj 파일을 편집합니다. Word 프로젝트의 경우 를 로 대체 HostPackage="{763FDC83-64E5-4651-AC9B-28C4FEB985A1}"HostPackage="{6CE98B71-D55A-4305-87A8-0D6E368D9600}"합니다. Excel 프로젝트의 경우 을 로 대체 HostPackage="{B284B16A-C42C-4438-BDCD-B72F4AC43CFB}"HostPackage="{825100CF-0BA7-47EA-A084-DCF3308DAF74}"합니다. Outlook 프로젝트의 경우 를 로 대체 HostPackage="{D2B20FF5-A6E5-47E1-90E8-463C6860CB05}"HostPackage="{20A848B8-E01F-4801-962E-25DB0FF57389}"합니다.

또는 마이그레이션된 프로젝트가 Microsoft Office 2010이 이미 설치된 개발 컴퓨터에서만 열려 있는지 확인합니다.

문제 5: Windows Forms 컨트롤이 포함된 업그레이드된 Office 2003 문서 수준 프로젝트의 오류

Microsoft Office 2003 문서 수준 프로젝트를 업그레이드하고 문서에 Windows Forms 컨트롤이 포함된 경우 업그레이드된 프로젝트에 컴파일 또는 런타임 오류가 있을 수 있습니다. 이 문제를 방지하려면 프로젝트를 업그레이드하기 전에 개발 컴퓨터에 Visual Studio 2005 Tools for Office Second Edition 런타임을 설치합니다. 이 버전의 런타임은 Microsoft Visual Studio 2005 Tools for Office Second Edition Runtime(VSTO 2005 SE)(x86)의 Microsoft 다운로드 센터에서 재배포 가능 패키지로 사용할 수 있습니다.

프로젝트 업그레이드를 완료한 후 다른 Office 솔루션에서 사용하지 않는 경우 개발 컴퓨터에서 Visual Studio 2005 Tools for Office Second Edition 런타임을 제거할 수 있습니다.

디자이너를 사용할 때 발생하는 문제

문서 수준 프로젝트에서 문서, 통합 문서 또는 워크시트 디자이너로 작업할 때 다음과 같은 문제가 발생할 수 있습니다.

문제 1: Designer 올바르게 로드하지 못했습니다.

Visual Studio는 다음 경우에 디자이너를 열 수 없습니다.

  • Excel 또는 Word 이미 열려 있으며 모달 대화 상자를 표시하고 있습니다. 디자이너를 열려면 검사 Excel 또는 Word 모달 대화 상자가 열려 있는지 확인하고 열려 있는 모달 대화 상자를 닫습니다. 모달 대화 상자가 열려 있지 않으면 Excel 또는 Word 응답하기 전에 다른 작업이 필요할 수 있습니다.
  • 프로젝트는 현재 디버그 중입니다. 디자이너를 열려면 디버깅을 중지하거나 완료합니다.
  • 개발 컴퓨터에 설치된 Excel VSTO 추가 기능에 Excel이 시작될 때 대화 상자가 표시됩니다. Excel 문서 수준 프로젝트를 만들려면 먼저 VSTO 추가 기능을 사용하지 않도록 설정해야 합니다.

문제 2: 컨트롤이 문서 또는 워크시트에 검은색 사각형으로 표시됨

문서 또는 워크시트에서 컨트롤을 그룹화하면 Visual Studio에서 컨트롤을 더 이상 인식하지 않습니다. 그룹화된 컨트롤은 속성 창에서 액세스할 수 없으며 문서 또는 워크시트에 검은색 사각형으로 표시됩니다. 해당 기능을 복원하려면 컨트롤의 그룹 해제를 수행해야 합니다.

문제 3: Word 템플릿의 컨트롤이 Visual Studio에 표시되지 않음

Visual Studio 디자이너에서 Word 템플릿을 열면 텍스트와 일치하지 않는 템플릿의 컨트롤이 표시되지 않을 수 있습니다. Visual Studio가 기본 보기에서 Word 템플릿을 열기 때문입니다. 컨트롤을 보려면 보기 메뉴를 선택하고 Microsoft Office Word 보기를 가리킨 다음 인쇄 레이아웃을 선택합니다.

문제 4: Visual Studio 디자이너에서 클립 아트 삽입 명령이 아무 작업도 수행하지 않음

Visual Studio 디자이너에서 Excel 또는 Word 열려 있는 경우 리본 메뉴의 일러스트레이션 탭에서 클립 아트 단추를 클릭하면 클립 아트 작업창이 열리지 않습니다. 클립 아트를 추가하려면 Visual Studio 외부의 기본 프로젝트 폴더(\bin 폴더에 있는 복사본이 아님)에 있는 통합 문서 또는 문서의 복사본을 열고 클립 아트를 추가한 다음 통합 문서 또는 문서를 저장해야 합니다.

코드를 작성할 때 발생하는 문제

Office 프로젝트에서 코드를 작성할 때 다음과 같은 문제가 발생할 수 있습니다.

문제 1: C를 사용할 때 Office 개체의 일부 이벤트에 액세스할 수 없음#

경우에 따라 Visual C# 프로젝트에서 Office PIA(주 interop 어셈블리) 형식의 instance 특정 이벤트에 액세스하려고 할 때 다음과 같은 컴파일러 오류가 표시될 수 있습니다.

'Microsoft.Office.Interop.Excel._Application.NewWorkbook'과 'Microsoft.Office.Interop.Excel.AppEvents_Event.NewWorkbook' 간의 모호성

이 오류는 개체의 다른 속성 또는 메서드와 이름이 같은 이벤트에 액세스하려고 했음을 의미합니다. 이벤트에 액세스하려면 개체를 해당 이벤트 인터페이스로 캐스팅해야 합니다.

이벤트가 있는 Office PIA 형식은 두 가지 인터페이스, 즉 모든 속성과 메서드가 있는 핵심 인터페이스와 개체에 의해 노출되는 이벤트를 포함하는 이벤트 인터페이스를 구현합니다. 이러한 이벤트 인터페이스는 명명 규칙 _<objectname> 이벤트 n>이벤트<(예:AppEvents_EventApplicationEvents2_Event)를 사용합니다. 개체에서 찾을 것으로 예상되는 이벤트에 액세스할 수 없는 경우 개체를 해당 이벤트 인터페이스로 캐스팅합니다.

예를 들어 개체에는 ApplicationNewWorkbook 이벤트와 속성이 있습니다 NewWorkbook . 이벤트를 처리하려면 을 NewWorkbookApplication 인터페이스로 캐스팅합니다 AppEvents_Event . 다음 코드 예제에서는 Excel용 문서 수준 프로젝트에서 이 작업을 수행하는 방법을 보여 줍니다.

private void ThisWorkbook_Startup(object sender, System.EventArgs e)
{
    ((Excel.AppEvents_Event)this.Application).NewWorkbook += 
        new Excel.AppEvents_NewWorkbookEventHandler(ThisWorkbook_NewWorkbook);
}

void ThisWorkbook_NewWorkbook(Excel.Workbook Wb)
{
    // Perform some work here.
}

Office PIA의 이벤트 인터페이스에 대한 자세한 내용은 Office 기본 interop 어셈블리의 클래스 및 인터페이스 개요를 참조하세요.

문제 2: .NET Framework 4 또는 .NET Framework 4.5를 대상으로 하는 프로젝트에서 Office PIA 클래스를 참조할 수 없습니다.

.NET Framework 4 또는 .NET Framework 4.5를 대상으로 하는 프로젝트에서 Office PIA에 정의된 클래스를 참조하는 코드는 기본적으로 컴파일되지 않습니다. PIA의 클래스는 명명 규칙 <개체 이름 클래스(>예: DocumentClassWorkbookClass)를 사용합니다. 예를 들어 Word VSTO 추가 기능 프로젝트의 다음 코드는 컴파일되지 않습니다.

Word.DocumentClass document = (Word.DocumentClass) Globals.ThisAddIn.Application.ActiveDocument;

이 코드는 다음과 같은 컴파일 오류를 발생합니다.

  • Visual Basic: "클래스 'DocumentClass'에 대한 참조는 해당 어셈블리가 No-PIA 모드를 사용하여 연결된 경우 허용되지 않습니다."
  • Visual C#: "Interop 형식 'Microsoft.Office.Interop. Word. DocumentClass'를 포함할 수 없습니다. 대신 해당 인터페이스를 사용합니다."

이 오류를 resolve 코드를 수정하여 해당 인터페이스를 대신 참조합니다. 예를 들어 개체를 DocumentClass 참조하는 대신 인터페이스의 Document instance 참조합니다.

Word.Document document = Globals.ThisAddIn.Application.ActiveDocument;

.NET Framework 4 또는 .NET Framework 4.5를 대상으로 하는 프로젝트는 기본적으로 Office PIA의 모든 interop 형식을 자동으로 포함합니다. 포함된 interop 형식 기능은 클래스가 아닌 인터페이스에서만 작동하기 때문에 이 컴파일 오류가 발생합니다. Office PIA의 인터페이스 및 클래스에 대한 자세한 내용은 Office 기본 interop 어셈블리의 클래스 및 인터페이스 개요를 참조하세요. Office 프로젝트의 포함된 interop 형식 기능에 대한 자세한 내용은 Office 솔루션 디자인 및 만들기를 참조하세요.

문제 3: Office 클래스에 대한 참조가 인식되지 않음

일부 클래스 이름(예: Application)은 및 System.Windows.Forms와 같은 Microsoft.Office.Interop.Word 여러 네임스페이스에 있습니다. 이러한 이유로 프로젝트 템플릿 맨 위에 있는 Imports/using 문에는 다음과 같은 약식 정규화 상수가 포함됩니다.

using Word = Microsoft.Office.Interop.Word;

이렇게 Imports/using 문을 사용하려면 office 클래스에 대한 참조를 Word 또는 Excel 한정자를 사용하여 구분해야 합니다. 예를 들면 다음과 같습니다.

Word.Document doc;

예를 들어 정규화되지 않은 선언을 사용하는 경우 오류가 발생합니다.

Document doc;  // Class is ambiguous

Word 또는 Excel 네임스페이스를 가져왔고 그 안의 모든 클래스에 액세스할 수 있더라도 네임스페이스 모호성을 제거하려면 모든 형식을 Word 또는 Excel로 완전히 한정해야 합니다.

프로젝트를 빌드할 때 발생하는 문제

Office 프로젝트를 빌드할 때 다음과 같은 문제가 발생할 수 있습니다.

문제 1: 권한이 제한된 문서를 기반으로 하는 문서 수준 프로젝트를 빌드할 수 없음

문서에 제한된 권한이 있는 경우 Visual Studio에서 문서 수준 프로젝트를 빌드할 수 없습니다. 프로젝트에 제한된 권한이 있는 문서가 포함되어 있으면 프로젝트가 컴파일되지 않으며 오류 목록 창에서 다음 메시지가 표시됩니다.

사용자 지정을 추가하지 못했습니다.

제한된 권한이 있는 문서를 포함하려면 솔루션을 개발하고 빌드하는 동안 무제한 문서를 사용합니다. 그런 다음 솔루션을 게시한 후 게시 위치의 문서에 제한된 권한을 적용합니다.

문제 2: NamedRange 컨트롤이 삭제된 후 컴파일러 오류가 발생합니다.

디자이너의 NamedRange 활성 워크시트가 아닌 워크시트에서 컨트롤을 삭제하는 경우 자동 생성된 코드가 프로젝트에서 제거되지 않을 수 있으며 컴파일러 오류가 발생할 수 있습니다. 코드가 제거되었는지 확인하려면 컨트롤을 삭제하기 전에 항상 컨트롤이 포함된 NamedRange 워크시트를 선택하여 활성 워크시트로 만들어야 합니다. 컨트롤을 삭제할 때 자동 생성된 코드가 삭제되지 않으면 워크시트를 활성화하고 워크시트가 수정된 것으로 표시되도록 변경하여 디자이너가 코드를 삭제하도록 할 수 있습니다. 프로젝트를 다시 빌드하면 코드가 제거됩니다.

프로젝트를 디버그할 때 발생하는 문제

Office 프로젝트를 디버그할 때 다음과 같은 문제가 발생할 수 있습니다.

문제 1: 개발 컴퓨터에 솔루션을 게시하고 설치할 때 제거하라는 메시지가 표시됩니다.

Office 솔루션을 디버그할 때 다음 오류가 표시될 수 있습니다.

다른 버전이 현재 설치되어 있고 이 위치에서 업그레이드할 수 없으므로 사용자 지정을 설치할 수 없습니다.

이 오류는 이전에 개발 컴퓨터에 Office 솔루션을 게시하고 설치했음을 나타냅니다. 메시지가 표시되지 않도록 하려면 솔루션을 디버그하기 전에 컴퓨터에 설치된 프로그램 목록에서 솔루션을 제거합니다. 또는 개발 컴퓨터에 다른 사용자 계정을 만들어 게시된 솔루션의 설치를 테스트할 수 있습니다.

문제 2: UNC 네트워크 위치에서 만든 문서 수준 프로젝트가 Visual Studio에서 실행되지 않음

EXCEL용 문서 수준 프로젝트를 만들거나 UNC 네트워크 위치에서 Word 경우 Excel 또는 Word 신뢰할 수 있는 위치 목록에 문서의 위치를 추가해야 합니다. 그렇지 않으면 Visual Studio에서 프로젝트를 실행하거나 디버그하려고 할 때 사용자 지정이 로드되지 않습니다. 신뢰할 수 있는 위치에 대한 자세한 내용은 문서에 트러스트 부여를 참조하세요.

문제 3: 디버깅 후 스레드가 올바르게 중지되지 않음

Visual Studio의 Office 프로젝트는 디버거가 프로그램을 올바르게 닫을 수 있도록 하는 스레드 명명 규칙을 따릅니다. 솔루션에서 스레드를 만드는 경우 디버깅을 중지할 때 이러한 스레드가 올바르게 처리되도록 접두사 VSTA_ 각 스레드의 이름을 지정해야 합니다. 예를 들어 네트워크 이벤트가 VSTA_NetworkListener 대기하는 스레드의 속성을 설정할 Name 수 있습니다.

문제 4: 개발 컴퓨터에서 Office 솔루션을 실행하거나 디버그할 수 없습니다.

개발 컴퓨터에서 Office 프로젝트를 실행하거나 개발할 수 없는 경우 다음 오류 메시지가 표시 될 수 있습니다.

애플리케이션 도메인을 만들 수 없으므로 사용자 지정을 로드할 수 없습니다.

Visual Studio는 .NET Framework 어셈블리 로더인 Fusion을 사용하여 Office 솔루션을 로드하기 전에 어셈블리를 캐시합니다. Visual Studio가 Fusion 캐시에 쓸 수 있는지 확인하고 다시 시도합니다. 자세한 내용은 섀도 복사본 어셈블리를 참조하세요.

문제 5: 편집 및 계속을 사용한 후 문서 수준 프로젝트에서 디버거를 중지할 때 오류 발생

편집계속을 사용하여 Excel용 문서 수준 프로젝트에서 코드를 변경하거나 프로젝트가 중단 모드인 동안 Word 경우 디버거를 중지하면 다음 오류 메시지가 표시되는 대화 상자가 표시될 수 있습니다.

프로세스를 현재 상태로 종료하면 데이터 손실 및 시스템 불안정을 포함하여 원치 않는 결과가 발생할 수 있습니다.

대화 상자에서 또는 아니요를 선택하든 Visual Studio는 Excel 또는 Word 프로세스를 종료하고 디버거를 중지합니다. 이 대화 상자를 표시하지 않고 프로젝트 디버깅을 중지하려면 Visual Studio에서 디버거를 중지하지 않고 Excel을 종료하거나 직접 Word.

참조