연습: 디자인 타임에 사용자 지정 Windows Forms 컨트롤 디버그
사용자 지정 컨트롤을 만들 때 디자인 타임 동작을 디버그해야 하는 경우가 많습니다. 사용자 지정 컨트롤에 대한 사용자 지정 디자이너를 작성하는 경우 특히 그렇습니다. 자세한 내용은 연습: Visual Studio의 디자인 타임 기능을 사용하는 Windows Forms 컨트롤 만들기를 참조하세요.
다른 .NET Framework 클래스를 디버그하는 것처럼 Visual Studio를 사용하여 사용자 지정 컨트롤을 디버그할 수 있습니다. 차이점은 사용자 지정 컨트롤의 코드를 실행하고 있는 별도의 Visual Studio 인스턴스를 디버그한다는 것입니다.
Important
주로 이 문서는 .NET Framework가 포함된 Windows Forms용 클래식 In-Process 디자이너를 위한 것입니다. 이 절차는 (.NET Framework가 아닌) .NET을 대상으로 하는 프로젝트에 직접 적용되거나 완전히 호환되지 않을 수 있습니다.
.NET Framework 프로젝트의 경우 플랫폼 대상 설정인 Any 또는 x64로 컴파일할 수 있는 프로젝트만이 이 디자이너에서 완전하게 지원됩니다. ActiveX, COM 또는 기타 32비트 구성 요소를 사용하는 프로젝트에는 호환성 문제가 있을 수 있습니다. 현재 미리 보기로 제공되는 Out-Of-Process Framework 디자이너는 이러한 많은 호환성 문제를 해결합니다. 그러나 디자인 타임 기능은 64비트 In-Process 디자이너만큼 잘 작동하지 않을 수 있습니다. Out-Of-Process Framework 디자이너를 사용하도록 설정하려면 도구 >옵션>환경>미리 보기 기능으로 이동합니다.
Out-Of-Process 디자이너에 대한 자세한 내용은 .NET Framework 이후 디자이너 변경 내용을 참조하세요.
프로젝트를 만듭니다.
첫 번째 단계에서는 애플리케이션 프로젝트를 만듭니다. 이 프로젝트를 사용하여 사용자 지정 컨트롤을 호스트하는 애플리케이션을 빌드합니다.
Visual Studio에서 Windows 애플리케이션 프로젝트를 만들고 이름을 DebuggingExample로 지정합니다.
컨트롤 라이브러리 프로젝트 만들기
Windows 컨트롤 라이브러리 프로젝트를 솔루션에 추가합니다.
새 UserControl 항목을 DebugControlLibrary 프로젝트에 추가합니다. 이름을 DebugControl로 지정합니다.
솔루션 탐색기에서 기본 이름이 UserControl1인 코드 파일을 삭제하여 프로젝트의 기본 컨트롤을 삭제합니다.
솔루션을 빌드합니다.
검사점
이때 도구 상자에서 사용자 지정 컨트롤을 볼 수 있습니다.
진행 상황을 확인하려면 DebugControlLibrary 구성 요소라는 새 탭을 찾고 클릭하여 선택합니다. 탭이 열리면 해당 컨트롤은 옆에 기본 아이콘이 있는 DebugControl로 나열됩니다.
사용자 지정 컨트롤에 속성 추가
사용자 지정 컨트롤의 코드가 디자인 타임에 실행 중임을 보여 주려면 속성을 구현하는 코드에서 해당 속성을 추가하고 중단점을 설정합니다.
코드 편집기에서 DebugControl을 엽니다. 다음 코드를 클래스 정의에 추가합니다.
Private demoStringValue As String = Nothing <BrowsableAttribute(true)> Public Property DemoString() As String Get Return Me.demoStringValue End Get Set(ByVal value As String) Me.demoStringValue = value End Set End Property
private string demoStringValue = null; [Browsable(true)] public string DemoString { get { return this.demoStringValue; } set { demoStringValue = value; } }
솔루션을 빌드합니다.
호스트 양식에 사용자 지정 컨트롤 추가
사용자 지정 컨트롤의 디자인 타임 동작을 디버그하려면 호스트 양식에 사용자 지정 컨트롤 클래스의 인스턴스를 배치합니다.
“DebuggingExample” 프로젝트에서 Windows Forms 디자이너에 있는 Form1을 엽니다.
도구 상자에서 DebugControlLibrary 구성 요소 탭을 열고 DebugControl 인스턴스를 양식으로 끌어옵니다.
속성 창에서
DemoString
사용자 지정 속성을 찾습니다. 다른 속성과 마찬가지로 해당 값을 변경할 수 있습니다. 또한DemoString
속성을 선택하면 속성 설명 문자열이 속성 창 아래쪽에 표시됩니다.
디자인 타임 디버깅을 위한 프로젝트 설정
사용자 지정 컨트롤의 디자인 타임 동작을 디버그하려면 사용자 지정 컨트롤의 코드를 실행하고 있는 별도의 Visual Studio 인스턴스를 디버그합니다.
솔루션 탐색기에서 DebugControlLibrary 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.
DebugControlLibrary 속성 시트에서 디버그 탭을 선택합니다.
작업 시작 섹션에서 외부 프로그램 시작을 선택합니다. 별도 Visual Studio 인스턴스를 디버깅하게 되므로, 줄임표(
) 단추를 클릭하여 Visual Studio IDE를 탐색합니다. 실행 파일의 이름은 devenv.exe이고 기본 위치에 설치한 경우 해당 경로는 %ProgramFiles(x86)%\Microsoft Visual Studio\2019\<edition>\Common7\IDE입니다.
확인을 선택하여 대화 상자를 닫습니다.
DebugControlLibrary 프로젝트를 마우스 오른쪽 단추로 클릭하고 시작 프로젝트로 설정을 선택하여 이 디버깅 구성을 사용하도록 설정합니다.
디자인 타임에 사용자 지정 컨트롤 디버그
이제 디자인 모드에서 실행되므로 사용자 지정 컨트롤을 디버그할 준비가 되었습니다. 디버깅 세션을 시작하면 새 Visual Studio 인스턴스가 만들어지고 이를 사용하여 “DebuggingExample” 솔루션을 로드합니다. Forms 디자이너에서 Form1을 열면 사용자 지정 컨트롤의 인스턴스가 만들어지고 실행이 시작됩니다.
코드 편집기에서 DebugControl 원본 파일을 열고
DemoString
속성의Set
접근자에 중단점을 배치합니다.F5 키를 눌러 디버깅 세션을 시작합니다. 새 Visual Studio 인스턴스가 만들어집니다. 다음 두 가지 방법으로 인스턴스를 구분할 수 있습니다.
디버깅 인스턴스의 제목 표시줄에 실행 중이라는 단어가 있습니다.
디버깅 인스턴스의 디버그 도구 모음에 시작 단추가 사용 안 함으로 설정되어 있습니다.
중단점은 디버깅 인스턴스에 설정됩니다.
새 Visual Studio 인스턴스에서 “DebuggingExample” 솔루션을 엽니다. 파일 메뉴에서 최근 프로젝트를 선택하여 솔루션을 쉽게 찾을 수 있습니다. “DebuggingExample.sln” 솔루션 파일이 가장 최근에 사용된 파일로 나열됩니다.
Important
.NET 6 이상의 Windows Forms 프로젝트를 디버그하는 경우, 프로젝트를 로드하지 말고 대신에 이 Visual Studio 인스턴스를 사용하여 디버거를 DesignToolsServer.exe 프로세스에 연결합니다. 디버그>프로세스에 연결 메뉴 항목을 선택합니다. 프로세스 목록에서 DesignToolsServer.exe를 찾고 연결을 누릅니다. 자세한 내용은 .NET Framework 이후 디자이너 변경 내용을 참조 하세요.
Forms 디자이너에서 Form1을 열고 DebugControl 컨트롤을 선택합니다.
DemoString
속성 값을 변경합니다. 변경을 커밋하면 포커스가 Visual Studio의 디버깅 인스턴스로 이동하고 실행이 중단점에서 중지됩니다. 다른 코드와 마찬가지로 속성 접근자를 한 단계씩 진행할 수 있습니다.디버깅을 중지하려면 Visual Studio의 호스트된 인스턴스를 종료하거나 디버깅 인스턴스에서 디버깅 중지 단추를 선택합니다.
다음 단계
이제 디자인 타임에 사용자 지정 컨트롤을 디버그할 수 있으므로 Visual Studio IDE와 컨트롤의 상호 작용을 다양하게 확장할 수 있습니다.
Component 클래스의 DesignMode 속성을 사용하여 디자인 타임에만 실행할 코드를 작성할 수 있습니다. 자세한 내용은 DesignMode를 참조하십시오.
컨트롤의 속성에 적용하여 사용자 지정 컨트롤과 디자이너의 상호 작용을 조작할 수 있는 여러 가지 특성이 있습니다. 이 특성은 System.ComponentModel 네임스페이스에서 찾을 수 있습니다.
사용자 지정 컨트롤에 대한 사용자 지정 디자이너를 작성할 수 있습니다. 이렇게 하면 Visual Studio를 통해 노출되는 확장 가능한 디자이너 인프라를 사용하여 디자인 환경을 완벽하게 제어할 수 있습니다. 자세한 내용은 연습: Visual Studio의 디자인 타임 기능을 사용하는 Windows Forms 컨트롤 만들기를 참조하세요.
참고 항목
.NET Desktop feedback