다음을 통해 공유


디자인 타임에 Visual Studio 문제 해결

업데이트: 2007년 11월

Visual Studio Tools for Office를 사용하여 솔루션을 개발할 때 다음과 같은 문제가 발생할 수 있습니다.

솔루션을 저장한 다음 실행하면 오류가 발생하는 경우

Visual Studio에서는 솔루션을 저장하기 전까지 임시 폴더에 보관합니다. Visual Studio Tools for Office에서는 임시 위치에 있는 솔루션을 신뢰할 수 있도록 보안 정책을 자동으로 변경합니다. 이러한 변경 내용은 솔루션이 빌드될 때 적용됩니다. 솔루션을 영구 폴더에 저장하기 전에 솔루션을 변경하지 않으면 새 위치에서 솔루션을 다시 실행할 때 Visual Studio에서 솔루션이 빌드되지 않습니다. 따라서 솔루션이 새 위치에서 자동으로 신뢰되지 않으므로 솔루션이 실행되지 않습니다.

새 솔루션을 영구 위치에 저장한 후 오류가 발생하면 빌드 메뉴를 연 다음 솔루션 다시 빌드를 클릭하십시오. 이렇게 하면 솔루션을 변경하지 않아도 Visual Studio에서 솔루션이 빌드됩니다. 그런 다음 Visual Studio Tools for Office에서 새 위치에 대한 보안 정책을 적절하게 변경합니다.

사용 권한이 제한된 문서를 기반으로 하는 문서 수준 프로젝트를 빌드할 수 없는 경우

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

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

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

C#을 사용할 때 일부 이벤트가 발생하지 않는 경우

이름이 같은 메서드와 이벤트가 있는 Office 개체가 Office 주 Interop 어셈블리에서 두 개체로 분할되었습니다. 하나는 모든 속성과 메서드가 있는 핵심 개체이고 또 하나는 속성이나 메서드와 충돌하는 이름을 가진 이벤트가 들어 있는 이벤트 개체입니다. 이러한 이벤트 개체는 <objectname>_Event라는 명명 규칙을 사용합니다. 예상한 이벤트가 표시되지 않으면 <objectname>_Event 인터페이스로 캐스팅하십시오.

예를 들어, Workbook에 대한 ActivateEvent 이벤트와 Activate 메서드가 있는 경우 이 이벤트를 처리하려면 Workbook 대신 WorkbookEvents_Event를 사용합니다.

다음과 같이 선언 구역에 멤버 변수를 만듭니다.

private Excel.Workbook wkbk;
private Excel.WorkbookEvents_Event wbEvents;
private Excel.WorkbookEvents_ActivateEventHandler activateEvent;

다음과 같이 _Startup에 이벤트를 연결합니다.

wbEvents = (Excel.WorkbookEvents_Event)wkbk;
activateEvent = new Excel.WorkbookEvents_ActivateEventHandler(ThisWorkbook_Activate);
wbEvents.Activate += activateEvent;

다음과 같이 이벤트 처리기를 작성합니다.

private void ThisWorkbook_Activate()
{
    // Your code goes here.
} 

Excel.Workbook.Activate에서 ActivateEvent 이벤트가 아닌 Activate 메서드를 반환하기 때문에 WorkbookEvents_Event로 캐스팅해야 합니다.

또는 다음과 같이 개체를 Startup에서 해당 이벤트 인터페이스로 캐스팅할 수 있습니다.

((Excel.WorkbookEvents_Event)(Globals.ThisWorkbook.InnerObject)).Activate += 
    new Excel.WorkbookEvents_ActivateEventHandler(ThisWorkbook_Activate); 

그리고 다음과 같이 코드에 대한 이벤트 처리기를 작성합니다.

private void ThisWorkbook_Activate()
{
    // Your code goes here.
} 

Office 클래스에 대한 참조를 인식할 수 없는 경우

Application과 같은 일부 클래스 이름은 Microsoft.Office.Interop.WordSystem.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이라는 단어로 정규화해 주어야 합니다.

기존 프로젝트의 문서에 따라 새 프로젝트를 만들면 컨트롤 속성이 손실되는 경우

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

컨트롤이 문서 또는 워크시트에 검정 사각형으로 표시되는 경우

문서나 워크시트에서 컨트롤을 그룹화하면 Visual Studio Tools for Office에서 더 이상 해당 컨트롤을 인식하지 못합니다. 그룹화된 컨트롤은 속성 창에서 액세스되지 않으며 문서나 워크시트에 검정 사각형으로 표시됩니다. 컨트롤의 기능을 복원하려면 컨트롤의 그룹을 해제해야 합니다.

Word 서식 파일의 컨트롤이 Visual Studio에서 표시되지 않는 경우

Visual Studio 디자이너에서 Word 서식 파일을 열면 서식 파일에서 텍스트 줄 안에 없는 컨트롤이 표시되지 않을 수 있습니다. 이는 Visual Studio에서 Word 서식 파일이 기본 보기로 열리기 때문입니다. 컨트롤을 표시하려면 보기 메뉴에서 Microsoft Office Word 보기를 가리킨 다음 인쇄 레이아웃을 클릭합니다.

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

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

Microsoft Office 2003 프로젝트 이름을 Excel 또는 Word로 지정하면 컴파일러 오류가 발생하는 경우

Excel 및 Word는 Office 프로젝트에서 키워드로 예약되어 있습니다.

NamedRange 컨트롤이 삭제된 후 컴파일 오류가 발생하는 경우

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

어셈블리의 HTTP 경로를 사용할 수 없는 경우

이 문제의 주요 원인은 두 가지입니다.

  • HTTP 위치에 생성된 어셈블리의 보안 정책은 Visual Studio Tools for Office 프로젝트 마법사에서 수정할 수 없습니다. 이러한 어셈블리에는 직접 완전 신뢰를 부여해야 합니다. 자세한 내용은 방법: 폴더 및 어셈블리에 대한 권한 부여(2003 시스템)를 참조하십시오.

  • ASP.NET에서는 DLL 다운로드가 기본적으로 비활성화되어 있습니다. 사용자가 어셈블리를 다운로드할 수 있도록 하려면 어셈블리가 저장되어 있는 디렉터리에서 DLL을 다운로드할 수 있도록 웹 서버 관리자가 IIS(인터넷 정보 서비스) 속성을 변경해야 합니다. 자세한 내용은 웹 서버의 https://localhost/iisHelp/에 있는 IIS(인터넷 정보 서비스) 도움말을 참조하십시오.

    문제의 원인이 이것인지 확인하려면 웹 서버에서 DLL에 대해 거부된 요청 기록을 검사하십시오. 문제의 원인이 다른 것이라고 생각되면 모든 예외에서 실행을 중단하도록 디버거를 설정한 다음 오류 메시지를 확인하십시오.

UNC 네트워크 위치에 만든 프로젝트에서 보안 정책이 자동으로 수정되지 않는 경우

Visual Studio Tools for Office 프로젝트 마법사에서는 사용자 수준에서 보안 정책을 수정합니다. UNC 네트워크 위치에 프로젝트를 만드는 경우에는 컴퓨터 수준에서 보안 정책을 수정하여 어셈블리에 완전 신뢰를 부여해야 어셈블리를 실행할 수 있습니다. 컴퓨터 수준의 정책 변경은 직접 수행해야 합니다. 자세한 내용은 방법: 폴더 및 어셈블리에 대한 권한 부여(2003 시스템)를 참조하십시오.

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

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

디버깅 후 스레드가 제대로 중지되지 않는 경우

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

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 이벤트 처리기에 추가한 경우에는 사용자가 솔루션을 계속 사용하는 동안 이 코드가 호출될 수도 있습니다.

Visual Studio 디자이너에서 클립 아트 삽입 명령이 아무 작업도 수행하지 않는 경우

Visual Studio 디자이너에 Excel이나 Word가 열려 있을 때 삽입 메뉴를 열고 그림을 가리킨 다음 클립 아트를 클릭하면 클립 아트 작업 창이 열리지 않습니다. 메뉴 명령을 사용하여 클립 아트를 추가하려면 주 프로젝트 폴더에 있는 통합 문서나 문서의 복사본(\bin 폴더에 있는 복사본이 아님)을 Visual Studio 외부에서 열고 클립 아트를 추가한 다음 통합 문서나 문서를 저장해야 합니다.

Office 2003이 설치되어 있는데도 2003 문서 수준 프로젝트를 만들 수 없다.

이 문제는 2007 Microsoft Office system을 제거한 다음 Office 2003을 설치할 경우에 발생할 수 있습니다. 2003 문서 수준 사용자 지정 프로젝트를 만들면 다음 오류 메시지가 나타납니다.

"이 컴퓨터에 Microsoft Office의 호환되는 버전이 설치되어 있지 않습니다."

이 문제를 해결하려면

  1. Visual Studio를 닫습니다.

  2. 적절한 Microsoft Office 응용 프로그램을 열었다가 닫습니다. 예를 들어 Excel 2003 통합 문서 프로젝트를 만들려면 Excel 2003을 열었다가 닫습니다.

  3. Visual Studio를 시작하고 프로젝트를 만듭니다.

Excel 문서 수준 사용자 지정 프로젝트가 Visual Studio에서 열려 있을 때 Excel 통합 문서가 비활성화된다.

Excel 2007을 연 다음 Visual Studio에서 Excel 2007 문서 수준 사용자 지정 프로젝트를 만들면 먼저 연 통합 문서의 응답이 중지됩니다.

이 문제를 해결하려면 Visual Studio 디자이너에 표시된 워크시트를 클릭합니다. 그러면 먼저 연 통합 문서가 응답하기 시작합니다.

참고 항목

작업

방법: 오프라인으로 사용할 문서 배포(2003 시스템)

런타임에 Office 문제 해결

개념

보안 배포(2003 시스템)

Office 프로그래밍의 일반적인 작업

기타 리소스

Office 솔루션 문제 해결