중요합니다
Visual Studio 2022 버전 17.9부터 새로운 VisualStudio.Extensibility 모델을 사용하여 .NET 6.0+로 out-of-process에서 실행되는 시각화 도구를 작성할 수 있게 되었습니다. 새 모델을 사용하여 만든 확장은 Visual Studio 디버거 시각화 도우미 만들기 의 설명서를 참조하세요. 이전 버전의 Visual Studio를 지원해야 하거나 라이브러리 DLL의 일부로 사용자 지정 시각화 도우미를 제공하려는 경우 이 문서의 정보를 사용합니다. 이 정보는 이전 VSSDK(확장 개발 모델)에만 적용됩니다.
이 연습에서는 C#을 사용하여 간단한 시각화 도우미를 작성하는 방법을 보여 줍니다. 이 연습에서 만든 시각화 도우미는 Windows Form을 사용하여 문자열의 내용을 표시합니다. 이 간단한 문자열 시각화 도우미는 그 자체로는 유용하지 않지만 다른 데이터 형식에 더 유용한 시각화 도우미를 만들기 위해 따라야 하는 기본 단계를 보여 줍니다.
비고
표시되는 대화 상자 및 메뉴 명령은 활성 설정 또는 버전에 따라 도움말에 설명된 것과 다를 수 있습니다. 설정을 변경하려면 도구 메뉴로 이동하여 설정 가져오기 및 내보내기를 선택합니다. 자세한 내용은 다시 설정참조하세요.
시각화 도우미 코드는 디버거가 읽는 DLL 파일에 배치해야 합니다. 따라서 첫 번째 단계는 DLL에 대한 클래스 라이브러리 프로젝트를 만드는 것입니다.
수동으로 시각화 도우미 만들기
시각화 도우미를 만들려면 다음 작업을 완료합니다.
클래스 라이브러리 프로젝트 만들기
새 클래스 라이브러리 프로젝트를 만들려면새>파일>프로젝트를 선택합니다.
언어 드롭다운에서 C#을 선택합니다.
검색 상자에 클래스 라이브러리를 입력합니다. 클래스 라이브러리(.NET Framework)를 선택한 다음, 다음을 선택합니다.
대화 상자에서 이름을
MyFirstVisualizer
입력한 다음 만들기를 선택합니다.
시각화 도우미 프로젝트의 경우 .NET이 아닌 .NET Framework 클래스 라이브러리를 선택해야 합니다. 시각화 도우미는 .NET Framework여야 하지만 호출 앱은 .NET일 수 있습니다.
클래스 라이브러리를 만든 후에는 정의된 클래스를 Microsoft.VisualStudio.DebuggerVisualizers.DLL
사용할 수 있도록 파일에 대한 참조를 추가해야 합니다. 참조를 추가하기 전에 의미 있는 이름을 사용하려면 일부 클래스의 이름을 바꿔야 합니다.
Class1.cs 이름을 바꾸고 Microsoft.VisualStudio.DebuggerVisualizers 추가
솔루션 탐색기에서 Class1.cs 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 이름 바꾸기를 선택합니다.
이름을 Class1.cs DebuggerSide.cs 같은 의미 있는 이름으로 변경합니다.
비고
Visual Studio는 새 파일 이름과 일치하도록 DebuggerSide.cs 클래스 선언을 자동으로 변경합니다. 작업을 완료하라는 메시지가 표시되면 예를 선택합니다.
솔루션 탐색기에서 참조를 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 참조 추가를 선택합니다.
참조 추가 대화 상자의 찾아보기 탭에서 찾아보기를 선택하고 Microsoft.VisualStudio.DebuggerVisualizers.DLL 찾습니다.
Visual Studio 설치 디렉터리<\Common7\IDE\PublicAssemblies 하위 디렉터리의 Visual Studio 설치 디렉터리에서> DLL을 찾을 수 있습니다.
확인을 선택합니다.
DebuggerSide.cs의 지시문에 다음을
using
디렉티브로 추가합니다.using Microsoft.VisualStudio.DebuggerVisualizers;
이제 디버거 쪽 코드를 만들 준비가 되었습니다. 이 코드는 디버거 내에서 실행하여 시각화하려는 정보를 표시합니다. 먼저 DebuggerSide
개체 선언을 변경하여 기본 클래스 DialogDebuggerVisualizer
에서 상속을 구성해야 합니다.
DialogDebuggerVisualizer에서 상속
DebuggerSide.cs 다음 코드 줄로 이동합니다.
public class DebuggerSide
코드를 다음과 같이 변경합니다.
public class DebuggerSide : DialogDebuggerVisualizer
시각화 도우미 구성 요소 간에 통신하는 데 사용할 serialization 정책을 기본 클래스의 생성자에 전달할 수 있도록 빈 생성자를 추가합니다.
public DebuggerSide() : base(FormatterPolicy.NewtonsoftJson) // or FormatterPolicy.Json { }
비고
Visual Studio 2022 버전 17.11부터 .NET 5.0 이상에 대한 특수 디버거 쪽 고려 사항에 설명된 보안 문제로 인해 시각화 도우미는 포맷터 정책을 지정할
Legacy
수 없습니다.DialogDebuggerVisualizer
에는 재정의해야 하는 하나의 추상 메서드(Show
)가 있습니다.
DialogDebuggerVisualizer.Show 메서드 재정의
에서 public class DebuggerSide
다음 메서드를 추가합니다 .
protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
{
}
이 메서드는 Show
실제로 시각화 도우미 대화 상자 또는 다른 사용자 인터페이스를 만들고 디버거에서 시각화 도우미에 전달된 정보를 표시하는 코드를 포함합니다. 대화 상자를 만들고 정보를 표시하는 코드를 추가해야 합니다. 이 연습에서는 Windows Forms 메시지 상자를 사용합니다. 먼저 System.Windows.Forms에 대한 참조 및 using
지시문을 추가해야 합니다.
System.Windows.Forms 추가
솔루션 탐색기에서 참조를 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 참조 추가를 선택합니다.
참조 추가 대화 상자의 찾아보기 탭에서 찾아보기를 선택하고 System.Windows.Forms.DLL 찾습니다.
C:\Windows\Microsoft.NET\Framework\v4.0.30319에서 DLL을 찾을 수 있습니다.
확인을 선택합니다.
DebuggerSide.cs의 지시문에 다음을
using
에 추가합니다.using System.Windows.Forms;
이제 시각화 도우미에 대한 사용자 인터페이스를 만들고 표시하는 코드를 추가합니다. 이 샘플은 첫 번째 시각화 도우미이므로 사용자 인터페이스를 단순하게 유지하고 메시지 상자를 사용할 수 있습니다.
대화 상자에 시각화 도우미 출력 표시
메서드에서
Show
다음 코드 줄을 추가합니다.MessageBox.Show(objectProvider.GetObject().ToString());
이 예제 코드에는 오류 처리가 포함되지 않습니다. 실제 시각화 도우미 또는 다른 유형의 애플리케이션에 오류 처리를 포함해야 합니다.
빌드 메뉴에서 MyFirstVisualizer 빌드를 선택합니다. 프로젝트가 성공적으로 빌드되어야 합니다. 계속하기 전에 빌드 오류를 수정합니다.
이제 디버거 쪽 코드가 완료되었습니다. 그러나 한 단계 더 남아 있습니다. 디버기 측에 시각화 도구를 구성하는 클래스 집합을 알려주는 속성입니다.
디버기 대상 코드에 시각화할 형식을 추가하십시오.
디버거 쪽 코드에서 DebuggerVisualizerAttribute 속성을 사용하여 디버그기에서 시각화할 개체 원본의 형식을 지정합니다. 이 속성은 시각화할 Target
형식을 설정합니다.
다음 특성 코드를 DebuggerSide.cs에 추가하되,
using
지시문 뒤에오고namespace MyFirstVisualizer
앞에 위치시킵니다.[assembly:System.Diagnostics.DebuggerVisualizer( typeof(MyFirstVisualizer.DebuggerSide), typeof(VisualizerObjectSource), Target = typeof(System.String), Description = "My First Visualizer")]
빌드 메뉴에서 MyFirstVisualizer 빌드를 선택합니다. 프로젝트가 성공적으로 빌드되어야 합니다. 계속하기 전에 빌드 오류를 수정합니다.
이 시점에서 첫 번째 시각화 도우미가 완료됩니다. 단계를 올바르게 수행한 경우 시각화 도우미를 빌드하고 Visual Studio에 설치할 수 있습니다. 그러나 Visual Studio에 시각화 도우미를 설치하기 전에 올바르게 실행되는지 테스트해야 합니다. 이제 Visual Studio에 설치하지 않고 시각화 도우미를 실행하는 테스트 하네스를 만듭니다.
시각화 도우미를 표시하는 테스트 메서드 추가
클래스
public DebuggerSide
에 다음 메서드를 추가합니다.public static void TestShowVisualizer(object objectToVisualize) { VisualizerDevelopmentHost visualizerHost = new VisualizerDevelopmentHost(objectToVisualize, typeof(DebuggerSide)); visualizerHost.ShowVisualizer(); }
빌드 메뉴에서 MyFirstVisualizer 빌드를 선택합니다. 프로젝트가 성공적으로 빌드되어야 합니다. 계속하기 전에 빌드 오류를 수정합니다.
다음으로 시각화 도우미 DLL을 호출하는 실행 파일을 만들어야 합니다. 간단히 하기 위해 콘솔 애플리케이션 프로젝트를 사용합니다.
솔루션에 콘솔 애플리케이션 프로젝트 추가
솔루션 탐색기에서 솔루션을 마우스 오른쪽 단추로 클릭하고 추가를 선택한 다음 새 프로젝트를 선택합니다.
파일>새>프로젝트를 선택합니다. 언어 드롭다운에서 C#을 선택합니다. 검색 상자에 콘솔 앱을 입력한 다음 콘솔 앱(.NET Framework) 또는 .NET용 콘솔 애플리케이션 을 선택합니다. 다음을 선택합니다. 표시되는 대화 상자에서 이름을
MyTestConsole
입력한 다음 만들기를 선택합니다.
비고
테스트 하네스를 사용하여 시각화 도우미를 쉽게 테스트하려면 .NET Framework 콘솔 앱을 만듭니다. 대신 .NET 콘솔 앱을 만들 수 있지만 나중에 설명한 테스트 도구는 아직 .NET에서 지원되지 않으므로 테스트하려면 시각화 도우미를 설치해야 합니다. .NET 콘솔 앱의 경우 먼저 여기에 콘솔 앱을 만들고 필요한 DLL 및 프로젝트 참조를 추가한 다음 디버기 쪽 데이터 개체 추가에 설명된 단계를 따릅니다. ASP.NET Core 시나리오는 .NET 5.0 이상에 대한 특수 디버거 쪽 고려 사항을 참조하세요.
이제 MyTestConsole에서 MyFirstVisualizer를 호출할 수 있도록 필요한 참조를 추가해야 합니다.
MyTestConsole에 필요한 참조 추가
솔루션 탐색기에서 MyTestConsole을 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 참조 추가를 선택합니다.
참조 추가 대화 상자에서 찾아보기 탭을 열고 Microsoft.VisualStudio.DebuggerVisualizers.DLL 선택합니다.
확인을 선택합니다.
MyTestConsole을 마우스 오른쪽 단추로 클릭하고 참조 추가를 다시 선택합니다.
참조 추가 대화 상자에서 프로젝트 탭을 열고 MyFirstVisualizer를 선택합니다.
확인을 선택합니다.
이제 테스트 하네스를 완료하는 코드를 추가합니다.
MyTestConsole에 코드 추가
솔루션 탐색기에서 Program.cs 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 이름 바꾸기를 선택합니다.
이름을 Program.cs TestConsole.cs 같은 의미 있는 이름으로 편집합니다.
비고
Visual Studio는 새 파일 이름과 일치하도록 TestConsole.cs 클래스 선언을 자동으로 변경합니다.
TestConsole.cs 지시문에
using
다음 코드를 추가합니다.using MyFirstVisualizer;
메서드
Main
에서 다음 코드를 추가합니다.String myString = "Hello, World"; DebuggerSide.TestShowVisualizer(myString);
이제 첫 번째 시각화 도우미를 테스트할 준비가 되었습니다.
시각화 도우미 테스트
솔루션 탐색기에서 MyTestConsole을 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 시작 프로젝트로 설정을 선택합니다.
디버그 메뉴에서 시작선택합니다.
콘솔 애플리케이션이 시작되고 시각화 도우미가 나타나고 문자열 "Hello, World"가 표시됩니다.
축하합니다. 첫 번째 시각화 도우미를 빌드하고 테스트했습니다.
테스트 도구에서 시각화 도우미를 호출하는 대신 Visual Studio에서 시각화 도우미를 사용하려면 설치해야 합니다. 자세한 내용은 방법: 시각화 도우미 설치를 참조하세요.
디버기 측 데이터 객체 추가
이 섹션에서는 System.String
데이터 개체를 사용자 지정 데이터 개체로 바꿉니다.
솔루션 탐색기에서 솔루션을 마우스 오른쪽 단추로 클릭하고 추가를 선택한 다음 새 프로젝트를 선택합니다. 언어 드롭다운에서 C#을 선택합니다. 검색 상자에 클래스 라이브러리를 입력한 다음 클래스 라이브러리(.NET Framework) 또는 .NET Standard용 클래스 라이브러리 를 선택합니다.
비고
.NET Framework 테스트 콘솔 앱을 사용하는 경우 .NET Framework 클래스 라이브러리 프로젝트를 만들어야 합니다.
다음을 선택합니다. 표시되는 대화 상자에서 이름을
MyDataObject
입력한 다음 만들기를 선택합니다.(.NET Standard 클래스 라이브러리만 해당) 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 프로젝트 파일 편집을 선택합니다.
<TargetFramework>
값을netstandard2.0
으로 변경합니다.<TargetFramework>netstandard2.0</TargetFramework>
네임스페이스 내에서
MyDataObject
기본 코드를 다음 코드로 바꿉다.[Serializable] public class CustomDataObject { public CustomDataObject() { this.MyData = "MyTestData"; } public string MyData { get; set; } }
이 예제와 같이 읽기 전용 시각화 도우미의 경우 VisualizerObjectSource의 메서드를 구현할 필요가 없습니다.
다음으로, 새 데이터 개체를 사용하도록 MyFirstVisualizer 프로젝트를 업데이트합니다.
MyFirstVisualizer 프로젝트의 솔루션 탐색기에서 참조 노드를 마우스 오른쪽 단추로 클릭하고 참조 추가를 선택합니다.
프로젝트 아래에서 MyDataObject 프로젝트를 선택합니다.
DebuggerSide.cs 특성 코드에서 대상 값을 업데이트하여
System.String
을(를)MyDataObject.CustomDataObject
으로(로) 변경하십시오.Target = typeof(MyDataObject.CustomDataObject),
MyFirstVisualizer 프로젝트에서 메서드의
Show
코드를 다음 코드로 바꿉다.var data = objectProvider.GetObject() as MyDataObject.CustomDataObject; // You can replace displayForm with your own custom Form or Control. Form displayForm = new Form(); displayForm.Text = data.MyData; windowService.ShowDialog(displayForm);
앞의 코드는 데이터 개체의 속성을 사용하여 폼의 제목에 표시합니다.
다음으로, 사용자 지정 데이터 개체를 사용하도록 콘솔 앱을 업데이트합니다.
MyTestConsole 프로젝트 아래의 솔루션 탐색기에서 참조 또는 종속성 노드를 마우스 오른쪽 단추로 클릭하고 프로젝트 참조를
MyDataObject
추가합니다.Program.cs 메서드의 코드를
Main
다음 코드로 바꿉다.// String myString = "Hello, World"; CustomDataObject customDataObject = new CustomDataObject(); DebuggerSide.TestShowVisualizer(customDataObject);
(.NET 콘솔 앱) 테스트 환경이 지원되지 않으므로
TestShowVisualizer
호출을 try-catch 문에 묶습니다.try { DebuggerSide.TestShowVisualizer(customDataObject); } catch (Exception) { }
콘솔 앱에는 시각화 도우미에 대한 런타임 참조가 필요합니다. 주석 처리 대신 이전 코드를 유지하여 참조를 유지할 수 있습니다.
.NET Framework 콘솔 앱의 경우 테스트 하네스를 실행하거나( F5 키를 누르기) 방법: 시각화 도우미 설치의 지침을 따를 수 있습니다.
테스트 하네스를 사용하여 앱을 실행하면 앱에 Windows Form이 표시됩니다.
.NET 콘솔 앱의 경우
MyFirstVisualizer.dll
및MyDataObject.dll
을(를) 방법: 시각화 도우미 설치에 설명된 폴더에 복사합니다.시각화 도우미를 설치한 후 중단점을 설정하고 콘솔 앱을 실행한 다음 마우스로 가리킵니다
customDataObject
. 모든 항목이 올바르게 설정되면 돋보기 아이콘이 표시됩니다.
돋보기에서 MyFirstVisualizer 를 선택하면 제목에 데이터 개체 텍스트가 있는 Form이 표시됩니다.