연습: C#에서 시각화 도우미 작성

Important

Visual Studio 2022 버전 17.9부터 새로운 VisualStudio.Extensibility 모델을 사용하여 프로세스 외부에서 실행되는 .NET 6.0 이상에서 비주얼라이저를 작성할 수 있습니다. 비주얼라이저 작성자는 이전 버전의 Visual Studio를 지원하거나 사용자 지정 비주얼라이저를 라이브러리 DLL의 일부로 제공하려는 경우가 아니라면 Visual Studio 디버거 비주얼라이저 만들기에서 제공되는 새 설명서를 참조하는 것이 좋습니다.

이 연습에서는 C#을 사용하여 간단한 시각화 도우미를 작성하는 방법을 보여줍니다. 이 연습에서 만들 시각화 도우미는 Windows 양식을 사용하여 문자열의 내용을 표시합니다. 이 간단한 문자열 시각화 도우미는 그 자체로는 특히 유용하지 않지만 다른 데이터 형식에 더 유용한 시각화 도우미를 만들기 위해 수행해야 하는 기본 단계를 보여 줍니다.

참고 항목

표시되는 대화 상자와 메뉴 명령은 실제 설정이나 버전에 따라 도움말에서 설명하는 것과 다를 수 있습니다. 설정을 변경하려면 도구 메뉴로 이동하여 설정 가져오기 및 내보내기를 선택합니다. 자세한 내용은 재설정 설정을 참조하세요.

시각화 도우미 코드는 디버거가 읽는 DLL 파일에 배치해야 합니다. 따라서 가장 먼저 할 일은 DLL의 클래스 라이브러리 프로젝트를 만드는 것입니다.

수동으로 시각화 도우미 만들기

시각화 도우미를 만들려면 다음 작업을 완료합니다.

클래스 라이브러리 프로젝트 만들기

  1. 새 클래스 라이브러리 프로젝트를 만들려면 파일>새로 만들기>프로젝트를 선택합니다.

  2. 언어 드롭다운에서 C#을 선택합니다.

  3. 검색 상자에 클래스 라이브러리를 입력합니다. 클래스 라이브러리(.NET Framework)를 선택한 다음, 다음을 선택합니다.

  4. 대화 상자에서 MyFirstVisualizer 이름을 입력한 다음 만들기를 선택합니다.

시각화 도우미 프로젝트의 경우 .NET이 아니라 .NET Framework 클래스 라이브러리를 선택해야 합니다. 시각화 도우미는 .NET Framework여야 하지만 호출 앱은 .NET일 수 있습니다.

클래스 라이브러리를 만든 후에는 Microsoft.VisualStudio.DebuggerVisualizers.DLL 파일에 대한 참조를 추가하여 여기에서 정의한 클래스를 사용할 수 있도록 해야 합니다. 참조를 추가하기 전에 일부 클래스의 이름을 변경하여 의미 있는 이름을 사용해야 합니다.

Class1.cs의 이름을 바꾸고 Microsoft.VisualStudio.DebuggerVisualizers 추가

  1. 솔루션 탐색기에서 Class1.cs를 마우스 오른쪽 단추로 클릭하고 컨텍스트 메뉴에서 이름 바꾸기를 선택합니다.

  2. 이름을 Class1.cs에서 DebuggerSide.cs 같은 의미 있는 이름으로 변경합니다.

    참고 항목

    Visual Studio에서 새 파일 이름과 일치하도록 DebuggerSide.cs의 클래스 선언이 자동으로 변경됩니다. 작업을 완료하라는 메시지가 표시되면 를 선택합니다.

  3. 솔루션 탐색기에서 참조를 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 참조 추가를 클릭합니다.

  4. 참조 추가 대화 상자의 찾아보기 탭에서 찾아보기를 선택하고 Microsoft.VisualStudio.DebuggerVisualizers.DLL을 찾습니다.

    Visual Studio 설치 디렉터리의 <Visual Studio Install Directory>\Common7\IDE\PublicAssemblies 하위 디렉터리에서 DLL을 찾을 수 있습니다.

  5. 확인을 선택합니다.

  6. DebuggerSide.cs에서 다음을 using 지시문에 추가합니다.

    using Microsoft.VisualStudio.DebuggerVisualizers;
    

이제 디버거 쪽 코드를 만들 준비가 되었습니다. 이 코드는 시각화하려는 정보를 표시하기 위해 디버거 내에서 실행됩니다. 먼저 DebuggerSide 개체의 선언을 변경하여 DialogDebuggerVisualizer 기본 클래스에서 상속을 구성하도록 해야 합니다.

DialogDebuggerVisualizer에서 상속

  1. DebuggerSide.cs에서 다음 코드 줄로 이동합니다.

    public class DebuggerSide
    
  2. 코드를 다음과 같이 변경합니다.

    public class DebuggerSide : DialogDebuggerVisualizer
    
  3. 비주얼라이저 구성 요소 간의 통신에 사용할 serialization 정책을 기본 클래스의 생성자에 전달할 수 있도록 빈 생성자를 추가합니다.

    public DebuggerSide() : base(FormatterPolicy.NewtonsoftJson) // or FormatterPolicy.Json
    {
    }
    

    참고 항목

    Visual Studio 2022 버전 17.11부터 .NET 5.0+에 대한 디버거쪽 특별 고려 사항에 설명된 보안 문제로 인해 비주얼라이저에서 Legacy 포맷터 정책을 지정할 수 없습니다.

  4. 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 추가

  1. 솔루션 탐색기에서 참조를 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 참조 추가를 클릭합니다.

  2. 참조 추가 대화 상자의 찾아보기 탭에서 찾아보기를 선택하고, System.Windows.Forms.DLL을 찾습니다.

    C:\Windows\Microsoft.NET\Framework\v4.0.30319에서 이 DLL을 찾을 수 있습니다.

  3. 확인을 선택합니다.

  4. DebuggerSide.cs에서 다음을 using 지시문에 추가합니다.

    using System.Windows.Forms;
    

이제 시각화 도우미의 사용자 인터페이스를 만들고 표시하는 코드를 추가합니다. 이 샘플에서는 처음으로 시각화 도우미를 만드는 것이므로 사용자 인터페이스를 간단하게 유지하고 메시지 상자를 사용할 수 있습니다.

시각화 도우미 출력을 대화 상자에 표시

  1. Show 메서드에 다음 코드 줄을 추가합니다.

    MessageBox.Show(objectProvider.GetObject().ToString());
    

    이 예시 코드에는 오류 처리 기능이 포함되어 있지 않습니다. 실제 시각화 도우미나 다른 유형의 애플리케이션을 만들 때는 오류 처리 기능을 포함해야 합니다.

  2. 빌드 메뉴에서 MyFirstVisualizer 빌드를 선택합니다. 프로젝트가 성공적으로 빌드되어야 합니다. 빌드 오류가 발생하면 계속 진행하기 전에 이를 수정합니다.

이제 디버거 쪽 코드가 완료되었습니다. 그러나 여기에서 한 단계를 추가로 수행해야 합니다. 시각화 도우미를 구성하는 클래스 컬렉션을 디버기 쪽에 알리는 특성이 필요합니다.

디버기 측 코드에 대해 시각화할 형식 추가

디버거 쪽 코드에서 DebuggerVisualizerAttribute 특성을 사용하여 디버기에 대해 시각화할 형식(개체 소스)을 지정합니다. Target 속성은 시각화할 형식을 설정합니다.

  1. 다음 특성 코드를 DebuggerSide.cs의 using 지시문 뒤에서 namespace MyFirstVisualizer 앞에 추가합니다.

    [assembly:System.Diagnostics.DebuggerVisualizer(
    typeof(MyFirstVisualizer.DebuggerSide),
    typeof(VisualizerObjectSource),
    Target = typeof(System.String),
    Description = "My First Visualizer")]
    
  2. 빌드 메뉴에서 MyFirstVisualizer 빌드를 선택합니다. 프로젝트가 성공적으로 빌드되어야 합니다. 빌드 오류가 발생하면 계속 진행하기 전에 이를 수정합니다.

    이제 첫 번째 시각화 도우미가 완성되었습니다. 각 단계를 올바르게 수행했다면 시각화 도우미를 빌드하고 Visual Studio에 설치할 수 있습니다. 그러나 시각화 도우미를 Visual Studio에 설치하기 전에 이를 테스트하여 올바르게 실행되는지 확인해야 합니다. 이제 시각화 도우미를 Visual Studio에 설치하지 않고 실행하는 테스트 환경을 만듭니다.

시각화 도우미를 표시하기 위한 테스트 메서드 추가

  1. public DebuggerSide 클래스에 다음 메서드를 추가합니다.

    public static void TestShowVisualizer(object objectToVisualize)
    {
       VisualizerDevelopmentHost visualizerHost = new VisualizerDevelopmentHost(objectToVisualize, typeof(DebuggerSide));
       visualizerHost.ShowVisualizer();
    }
    
  2. 빌드 메뉴에서 MyFirstVisualizer 빌드를 선택합니다. 프로젝트가 성공적으로 빌드되어야 합니다. 빌드 오류가 발생하면 계속 진행하기 전에 이를 수정합니다.

    이제 시각화 도우미 DLL을 호출하기 위한 실행 파일 프로젝트를 만들어야 합니다. 작업을 간소화하기 위해 콘솔 애플리케이션 프로젝트를 사용합니다.

솔루션에 콘솔 애플리케이션 프로젝트 추가

  1. 솔루션 탐색기에서 솔루션을 마우스 오른쪽 단추로 클릭하고 추가를 선택한 다음, 새 프로젝트를 선택합니다.

  2. 파일>새로 만들기>프로젝트를 선택합니다. 언어 드롭다운에서 C#을 선택합니다. 검색 상자에 콘솔 앱을 입력하고 콘솔 앱(.NET Framework) 또는 .NET용 콘솔 애플리케이션을 선택합니다. 다음을 선택합니다. 대화 상자가 표시되면 MyTestConsole 이름을 입력하고 만들기를 선택합니다.

참고 항목

테스트 도구를 사용하여 시각화 도우미를 쉽게 테스트하려면 .NET Framework 콘솔 앱을 만듭니다. .NET 콘솔 앱을 대신 만들 수도 있지만 뒷부분에서 설명하는 테스트 도구는 .NET용으로 아직 지원되지 않으므로 시각화 도우미를 설치하여 테스트해야 합니다. .NET 콘솔 앱의 경우 먼저 여기에서 콘솔 앱을 만들고 필요한 DLL 및 프로젝트 참조를 추가한 후 디버기 쪽 데이터 개체 추가에 설명된 단계를 따릅니다. ASP.NET Core 시나리오의 경우, .NET 5.0 이상에 대한 특수 디버거 측의 고려사항을 참조하세요.

이제 MyTestConsole에서 MyFirstVisualizer를 호출하는 데 필요한 참조를 추가해야 합니다.

MyTestConsole에 필요한 참조 추가

  1. 솔루션 탐색기에서 MyTestConsole을 마우스 오른쪽 단추로 클릭하고, 바로 가기 메뉴에서 참조 추가를 선택합니다.

  2. 참조 추가 대화 상자에서 찾아보기 탭을 열고 Microsoft.VisualStudio.DebuggerVisualizers.DLL을 선택합니다.

  3. 확인을 선택합니다.

  4. MyTestConsole을 마우스 오른쪽 단추로 클릭하고 참조 추가를 다시 선택합니다.

  5. 참조 추가 대화 상자에서 프로젝트 탭을 열고 MyFirstVisualizer를 선택합니다.

  6. 확인을 선택합니다.

이제 테스트 환경을 끝내기 위한 코드를 추가합니다.

MyTestConsole에 코드 추가

  1. 솔루션 탐색기에서 Program.cs를 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 이름 바꾸기를 선택합니다.

  2. Program.cs를 TestConsole.cs와 같은 더 의미 있는 이름으로 변경합니다.

    참고 항목

    Visual Studio에서 새 파일 이름과 일치하도록 TestConsole.cs의 클래스 선언이 자동으로 변경됩니다.

  3. TestConsole.cs에서 다음 코드를 using 지시문에 추가합니다.

    using MyFirstVisualizer;
    
  4. Main 메서드에 다음 코드를 추가합니다.

    String myString = "Hello, World";
    DebuggerSide.TestShowVisualizer(myString);
    

이제 첫 번째 시각화 도우미를 테스트할 준비가 되었습니다.

시각화 도우미 테스트

  1. 솔루션 탐색기에서 MyTestConsole을 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 시작 프로젝트로 설정을 선택합니다.

  2. 디버그 메뉴에서 시작을 선택합니다.

    콘솔 애플리케이션이 시작되고 시각화 도우미가 나타나 "Hello, World"라는 문자열을 표시합니다.

축하합니다. 첫 번째 시각화 도우미를 빌드하고 테스트했습니다!

시각화 도우미를 테스트 환경에서 호출하는 대신 Visual Studio에 사용하려면 이를 설치해야 합니다. 자세한 내용은 방법: 시각화 도우미 설치을 참조하세요.

디버기 쪽 데이터 개체 추가

이 섹션에서는 System.String 데이터 개체에서 사용자 지정 데이터 개체로 전환합니다.

  1. 솔루션 탐색기에서 솔루션을 마우스 오른쪽 단추로 클릭하고 추가를 선택한 다음, 새 프로젝트를 선택합니다. 언어 드롭다운에서 C#을 선택합니다. 검색 상자에 클래스 라이브러리를 입력하고 클래스 라이브러리(.NET Framework) 또는 .NET Standard용 클래스 라이브러리를 선택합니다.

    참고 항목

    .NET Framework 테스트 콘솔 앱을 사용하는 경우 .NET Framework 클래스 라이브러리 프로젝트를 만들어야 합니다.

  2. 다음을 선택합니다. 대화 상자가 표시되면 MyDataObject 이름을 입력하고 만들기를 선택합니다.

  3. (.NET Standard 클래스 라이브러리만 해당) 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 프로젝트 파일 편집을 선택합니다. <TargetFramework> 값을 netstandard2.0으로 변경합니다.

    <TargetFramework>netstandard2.0</TargetFramework>
    
  4. MyDataObject 네임스페이스 내에서 기본 코드를 다음 코드로 바꿉니다.

    [Serializable] 
    public class CustomDataObject
    {
       public CustomDataObject()
       {
          this.MyData = "MyTestData";
       }
       public string MyData { get; set; }
    }
    

    이 예시와 같은 읽기 전용 시각화 도우미의 경우 VisualizerObjectSource의 메서드를 구현할 필요가 없습니다.

    다음으로, 새 데이터 개체를 사용하도록 MyFirstVisualizer 프로젝트를 업데이트합니다.

  5. 솔루션 탐색기의 MyFirstVisualizer 프로젝트에서 참조 노드를 마우스 오른쪽 단추로 클릭하고 참조 추가를 선택합니다.

  6. 프로젝트에서 MyDataObject 프로젝트를 선택합니다.

  7. DebuggerSide.cs의 특성 코드에서 대상 값을 업데이트하여 System.StringMyDataObject.CustomDataObject로 변경합니다.

    Target = typeof(MyDataObject.CustomDataObject),
    
  8. 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);
    

    위의 코드에서는 데이터 개체의 속성을 사용하여 양식의 제목에 표시합니다.

    그런 다음, 사용자 지정 데이터 개체를 사용하도록 콘솔 앱을 업데이트합니다.

  9. 솔루션 탐색기의 MyTestConsole 프로젝트에서 참조 또는 종속성 노드를 마우스 오른쪽 단추로 클릭하고 프로젝트 참조를 MyDataObject에 추가합니다.

  10. Program.cs에서 Main 메서드의 코드를 다음 코드로 바꿉니다.

    // String myString = "Hello, World";
    CustomDataObject customDataObject = new CustomDataObject();
    
    DebuggerSide.TestShowVisualizer(customDataObject);
    
  11. (.NET 콘솔 앱) 테스트 도구가 지원되지 않으므로 TestShowVisualizer 호출을 try-catch 문으로 묶습니다.

    try
    {
          DebuggerSide.TestShowVisualizer(customDataObject);
    }
    catch (Exception) {
    }
    

    콘솔 앱에는 시각화 도우미에 대한 런타임 참조가 필요합니다. 위의 코드를 주석으로 처리하는 대신 유지하여 참조를 유지 관리할 수 있습니다.

  12. .NET Framework 콘솔 앱의 경우 테스트 도구(F5 키 누르기)를 실행하거나 방법: 시각화 도우미 설치의 지침을 따를 수 있습니다.

    테스트 도구를 사용하여 앱을 실행하면 앱에 Windows 양식이 표시됩니다.

  13. .NET 콘솔 앱의 경우 MyFirstVisualizer.dllMyDataObject.dll방법: 시각화 도우미 설치에 설명된 폴더에 복사합니다.

  14. 시각화 도우미를 설치한 후 중단점을 설정하고 콘솔 앱을 실행하고 customDataObject를 마우스로 가리킵니다. 모든 항목이 올바르게 설정된 경우 돋보기 아이콘 VisualizerIcon이 표시됩니다.

    시각화 도우미 돋보기 아이콘

    돋보기에서 MyFirstVisualizer를 선택하면 제목에 데이터 개체 텍스트가 포함된 양식이 표시됩니다.

    Windows 양식을 보여 주는 시각화 도우미