다음을 통해 공유


.NET Framework 이후 디자이너 변경 내용(Windows Forms .NET)

.NET용 Windows Forms용 비주얼 디자이너에는 .NET Framework 이후 몇 가지 향상된 기능과 변경 내용이 있습니다. 이러한 변경 내용은 주로 사용자 지정 컨트롤 디자이너에 영향을 줍니다. 이 문서에서는 .NET Framework의 주요 차이점에 대해 설명합니다.

Visual Studio는 .NET Framework 기반 애플리케이션이므로 Windows Forms에 대해 표시되는 Visual Designer도 .NET Framework를 기반으로 합니다. .NET Framework 프로젝트를 사용하면 Visual Studio 환경과 디자인 중인 Windows Forms 앱이 모두 동일한 프로세스인 devenv.exe 내에서 실행됩니다. 이렇게 하면 Windows Forms .NET(.NET Framework 아님) 앱을 사용하여 작업할 때 문제가 발생합니다. .NET 및 .NET Framework 코드는 모두 동일한 프로세스 내에서 작동할 수 없습니다. 따라서 Windows Forms .NET은 다른 디자이너인 "out-of-process" 디자이너를 사용합니다.

Out-of-process 디자이너

Out-of-Process 디자이너는 DesignToolsServer.exe라는 프로세스이며 Visual Studio의 devenv.exe 프로세스와 함께 실행됩니다. DesignToolsServer.exe 프로세스는 .NET 7 및 x64와 같이 앱이 대상으로 설정된 것과 동일한 버전 및 .NET 플랫폼에서 실행됩니다.

Visual Studio 디자이너에서 .NET Framework 프록시 개체는 디자이너의 각 구성 요소 및 컨트롤에 대해 만들어지며, 이 개체는 DesignToolsServer.exe 디자이너에서 프로젝트의 실제 .NET 개체와 통신합니다.

컨트롤 디자이너

NET의 경우 컨트롤 디자이너는 NuGet에서 사용할 수 있는 Microsoft.WinForms.Designer.SDK API를 사용하여 코딩해야 합니다. 이 라이브러리는 .NET용 .NET Framework 디자이너의 리팩터링입니다. 모든 디자이너 형식이 서로 다른 네임스페이스로 이동되었지만 형식 이름은 거의 동일합니다. .NET용 .NET Framework 디자이너를 업데이트하려면 네임스페이스를 약간 조정해야 합니다.

  • 디자이너 클래스 및 기타 관련 형식(예: ControlDesignerComponentTray)이 System.Windows.Forms.Design 네임스페이스에서 Microsoft.DotNet.DesignTools.Designers 네임스페이스로 이동되었습니다.
  • System.ComponentModel.Design 네임스페이스의 작업 목록 관련 형식이 Microsoft.DotNet.DesignTools.Designers.Actions 네임스페이스로 이동되었습니다.
  • System.Windows.Forms.Design.Behavior 네임스페이스의 표시기 및 맞춤선과 같은 동작 관련 형식이 Microsoft.DotNet.DesignTools.Designers.Behaviors 네임스페이스로 이동되었습니다.

사용자 지정 형식 편집기

사용자 지정 형식 편집기가 컨트롤 디자이너보다 더 복잡합니다. Visual Studio 프로세스는 .NET Framework 기반이므로 Visual Studio 컨텍스트 내에 표시되는 모든 UI도 .NET Framework 기반이어야 합니다. 이 디자인은 예를 들어 속성 표에서 button을(를) 클릭하여 호출된 사용자 지정 형식 편집기를 보여 주는 .NET 컨트롤을 만들 때 문제가 발생합니다. 대화 상자는 Visual Studio의 컨텍스트 내에서 표시할 수 없습니다.

Out-of-process 디자이너는 표시기, 기본 제공 형식 편집기 및 사용자 지정 그리기와 같은 대부분의 컨트롤 디자이너 기능을 처리합니다. 새 형식 편집기 표시와 같이 사용자 지정 모달 대화 상자를 표시해야 할 때마다 out-of-process 디자이너에서 제공하는 프록시-개체 클라이언트-서버 통신을 복제해야 합니다. 이렇게 하면 이전 .NET Framework 시스템보다 훨씬 많은 오버헤드가 발생합니다.

사용자 지정 컨트롤 속성이 Windows Forms에서 제공하는 형식 편집기를 사용하는 경우 EditorAttribute을(를) 사용하여 Visual Studio에서 사용할 해당 .NET Framework 편집기를 사용하여 속성을 표시할 수 있습니다. 기본 제공 편집기를 사용하면 Out-of-Process 디자이너가 제공하는 프록시-개체 클라이언트-서버 통신을 복제해야 하는 요구 사항을 피할 수 있습니다.

[Editor("System.Windows.Forms.Design.FileNameEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
        "System.Drawing.Design.UITypeEditor, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public string? Filename { get; set; }
<Editor("System.Windows.Forms.Design.FileNameEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")>
Public Property Filename As String

형식 편집기 만들기

문자 편집기를 제공하는 사용자 지정 디자이너를 만들려면 다음 목록에 설명된 대로 다양한 프로젝트가 필요합니다.

  • Control: 이 프로젝트는 컨트롤에 대한 코드가 포함된 사용자 지정 컨트롤 라이브러리입니다. 사용자가 컨트롤을 사용하려는 경우 참조하는 라이브러리입니다.
  • Control.Client: 사용자 지정 디자이너 UI 대화 상자가 포함된 .NET Framework용 Windows Forms 프로젝트입니다.
  • Control.Server: 컨트롤에 대한 사용자 지정 디자이너 코드를 포함하는 .NET용 Windows Forms 프로젝트입니다.
  • Control.Protocol: Control.ClientControl.Server 프로젝트에서 사용하는 통신 클래스를 포함하는 .NET Standard 프로젝트입니다.
  • Control.Package: 다른 모든 프로젝트를 포함하는 NuGet 패키지 프로젝트입니다. 이 패키지는 Visual Studio .NET용 Windows Forms 도구가 컨트롤 라이브러리 및 디자이너를 호스트하고 사용할 수 있도록 하는 방식으로 서식이 지정됩니다.

형식 편집기가 ColorEditor 또는 FileNameEditor과(와) 같은 기존 편집기에서 파생되더라도 Visual Studio의 컨텍스트에 표시할 새 UI 클래스 형식을 제공했기 때문에 해당 프록시-개체 클라이언트-서버 통신을 만들어야 합니다. 그러나 Visual Studio에 해당 형식 편집기를 구현하는 코드는 훨씬 간단합니다.

Important

이 시나리오를 자세히 설명하는 설명서가 진행 중입니다. 해당 설명서가 게시될 때까지 다음 블로그 게시물 및 샘플을 사용하여 이 프로젝트 구조를 만들고, 게시하고, 사용하는 방법을 안내합니다.