Office 솔루션에서 디자인 타임 오류 문제 해결
업데이트: 2010년 5월
Visual Studio에서 Office 솔루션을 개발하는 동안 다음 작업을 수행할 때 문제가 발생할 수 있습니다.
프로젝트 만들기, 업그레이드 및 열기
디자이너 사용
코드 작성
프로젝트 빌드
프로젝트 디버깅
프로젝트 만들기, 업그레이드 및 열기
Office 프로젝트를 만들거나 열 때 다음과 같은 오류가 발생할 수 있습니다.
프로젝트를 만들 수 없는 경우
Office 프로젝트를 만들거나 열려고 할 때 오류가 발생했지만 정보가 부족하여 Visual Studio에서 원인을 알 수 없습니다. 프로젝트를 닫고 Visual Studio를 종료한 다음 다시 시작해 보십시오.
문서 수준 프로젝트를 만들려고 하는 경우 새 프로젝트의 해당 문서와 이름이 같은 다른 문서가 Excel 또는 Word에서 이미 열려 있을 수 있습니다. Excel 또는 Word의 다른 모든 인스턴스가 닫혀 있는지 확인하십시오.
기존 프로젝트의 문서를 기반으로 새 프로젝트를 만들 때 컨트롤 속성이 손실되는 경우
기존 프로젝트의 문서를 기반으로 Office 프로젝트를 새로 만들 경우 문서에 있는 컨트롤의 속성은 새 프로젝트에 복사되지 않습니다. 기존 컨트롤에 대한 속성을 수동으로 다시 설정해야 합니다. 또는 새 프로젝트를 만드는 대신 기존 프로젝트의 복사본을 만들거나 디자이너에서 새 솔루션에 기존 프로젝트를 로드하고 기존 문서의 컨트롤을 복사한 다음 새 문서에 붙여넣어 컨트롤 속성을 유지할 수 있습니다.
기존 프로젝트의 템플릿을 기반으로 새 Word 2007 템플릿 프로젝트를 만들 때 Visual Studio가 응답하지 않게 되는 경우
다음과 같은 경우에 Word 2007 템플릿 프로젝트를 만들면 Visual Studio가 응답하지 않게 될 수 있습니다.
프로젝트가 Visual Studio의 다른 프로젝트에서 사용된 Word 템플릿을 기반으로 하는 경우
템플릿의 확장명이 .dot이고, 템플릿에 다른 프로젝트에서 추가된 Windows Forms 컨트롤이 포함되어 있는 경우
이 문제를 방지하려면 새 프로젝트를 만들기 전에 프로젝트를 만들 폴더를 Word의 신뢰할 수 있는 위치 목록에 추가합니다. 신뢰할 수 있는 위치에 폴더를 추가하는 방법에 대한 자세한 내용은 Microsoft Office 온라인 웹 사이트의 파일을 저장할 신뢰할 수 있는 위치 만들기, 제거 또는 변경을 참조하십시오.
기존 통합 문서를 기반으로 Excel 통합 문서 프로젝트를 만들 때 오류가 발생하는 경우
기존 통합 문서를 기반으로 새 Excel 프로젝트를 만드는 경우 다음과 같은 오류가 함께 나타날 수 있습니다.
Excel에서: "경고: 이 문서에는 매크로, ActiveX 컨트롤, XML 확장 팩 정보, 웹 구성 요소가 있습니다. 문서 검사에서 제거할 수 없는 개인 정보가 포함되어 있을 수 있습니다."
Visual Studio에서: "디자이너를 제대로 로드하지 못했습니다."
이러한 오류는 문서 검사를 통해 개인 정보가 제거된 통합 문서를 기반으로 프로젝트를 만들려고 할 때 발생할 수 있습니다. 이 오류를 방지하려면 프로젝트를 만들기 전에 다음 단계를 수행합니다.
Excel에서 통합 문서를 엽니다.
Excel에서 보안 센터를 엽니다.
개인 정보 옵션 탭에서 저장 시 파일 속성의 개인 정보 제거 확인란의 선택을 취소합니다.
통합 문서를 저장하고 Excel을 닫습니다.
마이그레이션 후 프로젝트를 열 수 없는 경우
Office 솔루션을 Microsoft Office 2010으로 마이그레이션한 후에는 2007 Microsoft Office system만 설치되어 있는 개발 컴퓨터에서는 프로젝트를 열 수 없습니다. 다음 오류가 표시될 수 있습니다.
"솔루션의 프로젝트 중 하나 이상이 제대로 로드되지 않았습니다. 자세한 내용은 출력 창을 참조하십시오."
"이 프로젝트 형식과 연결된 응용 프로그램이 이 컴퓨터에 설치되어 있지 않아 프로젝트를 만들 수 없습니다. 이 프로젝트 형식과 연결된 Microsoft Office 응용 프로그램을 설치해야 합니다."
이 문제를 해결하려면 .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이 설치되어 있는 개발 컴퓨터에서만 열려 있는지 확인합니다.
Windows Forms 컨트롤을 포함하는 업그레이드된 Office 2003 문서 수준 프로젝트에서 오류가 발생하는 경우
Microsoft Office 2003 문서 수준 프로젝트를 업그레이드하는 경우 문서에 Windows Forms 컨트롤이 포함되어 있으면 업그레이드된 프로젝트에서 컴파일 또는 런타임 오류가 발생할 수 있습니다. 이 문제를 방지하려면 프로젝트를 업그레이드하기 전에 개발 컴퓨터에 Visual Studio 2005 Tools for Office Second Edition Runtime을 설치하십시오. 이 런타임 버전은 Microsoft 다운로드 센터의 Microsoft Visual Studio 2005 Tools for Office Second Edition Runtime(빌드 8.0.50727.940)(x86)에서 재배포 가능 패키지로 제공됩니다.
Visual Studio 2005 Tools for Office Second Edition Runtime을 다른 Office 솔루션에서는 사용할 계획이 없는 경우 프로젝트 업그레이드를 마친 후 이를 제거할 수 있습니다.
Excel 2007 문서 수준 사용자 지정 프로젝트가 Visual Studio에서 열려 있으면 Excel 통합 문서가 비활성화되는 경우
Excel 2007을 연 다음 Visual Studio에서 Excel 2007 문서 수준 사용자 지정 프로젝트를 만들면 먼저 연 통합 문서의 응답이 중지됩니다.
이 문제를 해결하려면 Visual Studio 디자이너에 표시된 워크시트를 클릭합니다. 그러면 먼저 연 통합 문서가 응답하기 시작합니다.
디자이너 사용
문서 수준 프로젝트에서 문서, 통합 문서 또는 워크시트 디자이너를 사용하여 작업을 수행할 때 다음과 같은 오류가 발생할 수 있습니다.
디자이너를 제대로 로드하지 못하는 경우
Visual Studio에서는 다음과 같은 경우에 디자이너를 열 수 없습니다.
Excel 또는 Word가 이미 열려 있고 모달 대화상자가 표시되어 있는 경우. 디자이너를 열려면 Excel 또는 Word에 모달 대화 상자가 열려 있는지 여부를 확인하고 열려 있는 모달 대화 상자를 모두 닫습니다. 모달 대화 상자가 열려 있지 않은 경우 Excel이나 Word에서 응답하기 전에 다른 작업을 수행해야 하는 경우일 수 있습니다.
프로젝트가 이미 디버깅되고 있는 경우. 디자이너를 열려면 디버깅을 중지하거나 완료합니다.
Excel을 시작하면 개발 컴퓨터에 설치된 Excel 추가 기능에서 대화 상자가 표시되는 경우. Excel 문서 수준 프로젝트를 만들려면 먼저 추가 기능을 비활성화해야 합니다.
컨트롤이 문서 또는 워크시트에 검정 사각형으로 표시되는 경우
문서나 워크시트에서 컨트롤을 그룹화하면 Visual Studio에서 더 이상 해당 컨트롤을 인식하지 못합니다. 그룹화된 컨트롤은 속성 창에서 액세스되지 않으며 문서나 워크시트에 검정 사각형으로 표시됩니다. 컨트롤의 기능을 복원하려면 컨트롤의 그룹을 해제해야 합니다.
Word 템플릿의 컨트롤이 Visual Studio에서 표시되지 않는 경우
Visual Studio 디자이너에서 Word 템플릿을 열면 템플릿에서 텍스트 줄 안에 없는 컨트롤이 표시되지 않을 수 있습니다. 이는 Visual Studio에서 Word 템플릿이 기본 보기로 열리기 때문입니다. 컨트롤을 표시하려면 보기 메뉴에서 Microsoft Office Word 보기를 가리킨 다음 인쇄 레이아웃을 클릭합니다.
Visual Studio 디자이너에서 클립 아트 삽입 명령이 아무 작업도 수행하지 않는 경우
Visual Studio 디자이너에 Excel이나 Word가 열려 있을 때 리본 메뉴의 그림 탭에서 클립 아트 단추를 클릭하면 클립 아트 작업 창이 열리지 않습니다. 클립 아트를 추가하려면 주 프로젝트 폴더에 있는 통합 문서나 문서의 복사본(\bin 폴더에 있는 복사본이 아님)을 Visual Studio 외부에서 열고 클립 아트를 추가한 다음 통합 문서나 문서를 저장해야 합니다.
코드 작성
Office 프로젝트에서 코드를 작성할 때 다음과 같은 오류가 발생할 수 있습니다.
C#을 사용할 때 Office 개체의 일부 이벤트에 액세스할 수 없는 경우
일부 경우에는 Visual C# 프로젝트에서 Office PIA(주 interop 어셈블리) 형식의 인스턴스에 대한 특정 이벤트에 액세스하려고 할 때 다음과 같은 컴파일러 오류가 표시될 수 있습니다.
"'Microsoft.Office.Interop.Excel._Application.NewWorkbook'과(와) 'Microsoft.Office.Interop.Excel.AppEvents_Event.NewWorkbook' 사이에 모호성이 있습니다."
이 오류는 개체의 다른 속성 또는 메서드와 이름이 같은 이벤트에 액세스하려고 했음을 의미합니다. 이 이벤트에 액세스하려면 해당 개체를 이벤트 인터페이스로 캐스팅해야 합니다.
이벤트를 포함하는 Office PIA 형식에서는 두 개의 인터페이스, 즉 속성 및 메서드를 모두 포함하는 핵심 인터페이스와 개체에 의해 노출된 이벤트를 포함하는 이벤트 인터페이스를 구현합니다. 이러한 이벤트 인터페이스에는 objectnameEventsn_Event 형식(예: Microsoft.Office.Interop.Excel.AppEvents_Event 및 Microsoft.Office.Interop.Word.ApplicationEvents2_Event)의 명명 규칙이 사용됩니다. 개체에 대해 찾아야 하는 이벤트에 액세스할 수 없으면 개체를 해당 이벤트 인터페이스로 캐스팅하십시오.
예를 들어 Microsoft.Office.Interop.Excel.Application 개체에는 NewWorkbook 이벤트와 NewWorkbook 속성이 있습니다. NewWorkbook 이벤트를 처리하려면 Microsoft.Office.Interop.Excel.Application을 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의 이벤트 인터페이스에 대한 자세한 내용은 Overview of Classes and Interfaces in the Office Primary Interop Assemblies를 참조하십시오.
.NET Framework 4를 대상으로 하는 프로젝트에서 Office PIA 클래스를 참조할 수 없는 경우
.NET Framework 4를 대상으로 하는 프로젝트에서 Office PIA에 정의된 클래스를 참조하는 코드는 기본적으로 컴파일되지 않습니다. PIA의 클래스에는 objectnameClass 형식(예: DocumentClass 및 WorkbookClass)의 명명 규칙이 사용됩니다. 예를 들어 Word 추가 기능 프로젝트의 다음 코드는 컴파일되지 않습니다.
Dim document As Word.DocumentClass = Globals.ThisAddIn.Application.ActiveDocument
Word.DocumentClass document = (Word.DocumentClass) Globals.ThisAddIn.Application.ActiveDocument;
이 코드에서는 다음과 같은 컴파일러 오류가 발생합니다.
Visual Basic: "해당 어셈블리가 No-PIA 모드를 사용하여 연결되어 있으면 'DocumentClass' 클래스에 대한 참조를 사용할 수 없습니다."
Visual C#: "Interop 형식 ‘Microsoft.Office.Interop.Word.DocumentClass’을(를) 포함할 수 없습니다. 응용 가능한 인터페이스를 대신 사용하십시오."
이 오류를 해결하려면 대신 해당 인터페이스를 참조하도록 코드를 수정하십시오. 예를 들어 DocumentClass 개체를 참조하지 않고 대신 Document 인터페이스의 인스턴스를 참조합니다.
Dim document As Word.Document = Globals.ThisAddIn.Application.ActiveDocument
Word.Document document = Globals.ThisAddIn.Application.ActiveDocument;
기본적으로 .NET Framework 4를 대상으로 하는 프로젝트는 Office PIA의 모든 interop 형식을 자동으로 포함합니다. 이 컴파일 오류는 포함된 interop 형식 기능이 클래스가 아니라 인터페이스에 대해서만 작동하기 때문에 발생합니다. Office PIA의 인터페이스 및 클래스에 대한 자세한 내용은 Overview of Classes and Interfaces in the Office Primary Interop Assemblies를 참조하십시오. Office 프로젝트의 포함된 interop 형식 기능에 대한 자세한 내용은 Office 솔루션 디자인 및 만들기를 참조하십시오.
Office 클래스에 대한 참조를 인식할 수 없는 경우
Application과 같은 일부 클래스 이름은 Microsoft.Office.Interop.Word 및 System.Windows.Forms와 같은 여러 네임스페이스에 있습니다. 따라서 프로젝트 템플릿의 시작 부분에 있는 Imports/using 문에는 상수를 한정하는 다음과 같은 축약형이 포함되어 있습니다.
Imports Word = Microsoft.Office.Interop.Word
using Word = Microsoft.Office.Interop.Word;
Imports/using 문을 이렇게 사용하려면 다음과 같이 Word 또는 Excel 한정자를 사용하여 Office 클래스에 대한 참조를 구별해야 합니다.
Dim doc As Word.Document
Word.Document doc;
다음과 같이 비정규화된 선언을 사용하면 오류가 발생합니다.
Dim doc As Document ' Class is ambiguous
Document doc; // Class is ambiguous
Word 또는 Excel 네임스페이스를 가져왔으며 이 네임스페이스 내의 모든 클래스에 액세스할 수 있는 경우에도 네임스페이스를 확실히 구분할 수 있도록 모든 형식을 Word 또는 Excel이라는 단어로 정규화해야 합니다.
프로젝트 빌드
Office 프로젝트를 빌드할 때 다음과 같은 오류가 발생할 수 있습니다.
사용 권한이 제한된 문서를 기반으로 하는 문서 수준 프로젝트를 빌드할 수 없는 경우
Visual Studio에서는 문서의 사용 권한이 제한된 경우 문서 수준 프로젝트를 빌드할 수 없습니다. 사용 권한이 제한된 문서가 포함된 프로젝트는 컴파일되지 않으며 오류 목록 창에 다음 메시지가 표시됩니다.
"사용자 지정을 추가하지 못했습니다."
사용 권한이 제한된 문서를 포함하려면 솔루션을 개발 및 빌드할 때 무제한 문서를 사용합니다. 그런 다음 솔루션을 게시한 후 게시 위치의 문서에 제한된 사용 권한을 적용합니다.
NamedRange 컨트롤이 삭제된 후 컴파일 오류가 발생하는 경우
디자이너에서 활성 워크시트가 아닌 워크시트에서 NamedRange 컨트롤을 삭제하면 프로젝트에서 자동 생성 코드가 제거되지 않아 컴파일러 오류가 발생할 수 있습니다. 이때 코드가 확실하게 제거되도록 하려면 컨트롤을 삭제하기 전에 항상 NamedRange 컨트롤이 들어 있는 워크시트를 선택하여 활성 워크시트로 설정해야 합니다. 컨트롤을 삭제할 때 자동 생성 코드가 제거되지 않은 경우 워크시트를 활성화하고 내용을 변경하여 워크시트를 수정된 것으로 표시하면 디자이너에서 코드가 삭제됩니다. 프로젝트를 다시 빌드하면 코드가 제거됩니다.
프로젝트 디버깅
Office 프로젝트를 디버깅할 때 다음과 같은 오류가 발생할 수 있습니다.
개발 컴퓨터에서 솔루션을 게시하고 설치할 때 제거 관련 메시지가 표시되는 경우
Office 솔루션을 디버깅할 때 다음과 같은 오류가 발생할 수 있습니다.
"다른 버전이 현재 설치되어 있고 이 위치에서 업그레이드할 수 없으므로 사용자 지정을 설치할 수 없습니다."
이 오류는 이전에 개발 컴퓨터에 Office 솔루션을 게시 및 설치했음을 나타냅니다. 이 메시지가 나타나지 않도록 하려면 솔루션을 디버깅하기 전에 컴퓨터의 설치된 프로그램 목록에서 해당 솔루션을 제거하십시오. 또는 개발 컴퓨터에 다른 사용자 계정을 만들어 게시된 솔루션의 설치를 테스트해도 됩니다.
UNC 네트워크 위치에 만든 문서 수준 프로젝트가 Visual Studio에서 실행되지 않는 경우
Excel 또는 Word용 문서 수준 프로젝트를 UNC 네트워크 위치에 만든 경우에는 Excel 또는 Word의 신뢰할 수 있는 위치 목록에 해당 문서의 위치를 추가해야 합니다. 그러지 않으면 Visual Studio에서 프로젝트를 실행하거나 디버깅하려고 할 때 사용자 지정이 로드되지 않습니다. 신뢰할 수 있는 위치에 대한 자세한 내용은 문서에 신뢰 부여를 참조하십시오.
디버깅 후 스레드가 제대로 중지되지 않는 경우
Visual Studio의 Office 프로젝트는 디버거에서 프로그램을 제대로 닫을 수 있도록 하는 스레드 명명 규칙을 따릅니다. 솔루션에 스레드를 만드는 경우 각 스레드 이름을 지정할 때 VSTA_라는 접두사를 지정하여 디버깅을 중지할 때 해당 스레드가 올바르게 처리되도록 해야 합니다. 예를 들어 네트워크 이벤트를 기다리는 스레드의 Name 속성을 VSTA_NetworkListener로 설정할 수 있습니다.
개발 컴퓨터에서 Office 솔루션을 실행하거나 디버깅할 수 없는 경우
개발 컴퓨터에서 Office 프로젝트를 실행하거나 개발할 수 없는 경우 다음과 같은 오류 메시지가 표시될 수 있습니다.
"응용 프로그램 도메인을 만들 수 없으므로 사용자 지정을 로드할 수 없습니다."
Visual Studio에서는 .NET Framework 어셈블리 로더인 퓨전을 사용하여 Office 솔루션을 로드하기 전에 어셈블리를 캐시합니다. Visual Studio에서 퓨전 캐시에 쓸 수 있는지 확인한 후 다시 시도합니다. 자세한 내용은 어셈블리 섀도 복사를 참조하십시오.
편집하며 계속하기 기능을 사용한 후 문서 수준 프로젝트에서 디버거를 중지할 때 오류가 발생하는 경우
Excel 또는 Word용 문서 수준 프로젝트가 중단 모드에 있는 동안 편집하며 계속하기 기능을 사용하여 프로젝트의 코드를 변경할 경우, 이후에 디버거를 중지하면 다음과 같은 오류 메시지가 포함된 대화 상자가 표시될 수 있습니다.
"현재 상태에서 프로세스를 종료하면 데이터가 손실되거나 시스템이 불안정해질 수 있습니다."
이 대화 상자에서 예를 클릭하든 아니요를 클릭하든 관계없이 Visual Studio에서는 Excel 또는 Word 프로세스를 종료하고 디버거를 중지합니다. 이 대화 상자를 표시하지 않고 프로젝트 디버깅을 중지하려면 Visual Studio에서 디버거를 중지할 것이 아니라 Excel 또는 Word를 직접 종료합니다.
참고 항목
작업
개념
기타 리소스
변경 기록
날짜 |
변경 내용 |
이유 |
---|---|---|
2010년 5월 |
.NET Framework 4를 대상으로 하는 프로젝트에서 Office PIA 클래스를 참조하는 경우에 대한 단원을 개선했습니다. |
향상된 기능 관련 정보 |