.NET 워크로드의 관련 변경 내용에 따라 C#용 Windows Forms 템플릿이 지시문, 파일 범위 네임스페이스 및 nullable 참조 형식을 지원 global using
하도록 업데이트되었습니다. 일반적인 Windows Forms 앱은 여러 파일(예: Form1.cs 및 Form1.Designer.cs)으로 분할된 여러 형식으로 구성되므로 최상위 문은 Windows Forms 템플릿에서 특히 존재하지 않습니다. 그러나 업데이트된 템플릿에는 애플리케이션 부트스트랩 코드가 포함됩니다. 이로 인해 이전 버전의 .NET을 대상으로 하는 경우 비호환성이 발생할 수 있습니다.
도입된 버전
.NET 6 RC 1
기존 동작
Windows Forms 애플리케이션 진입점은 다음과 같습니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MyApp
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.SetHighDpiMode(HighDpiMode.SystemAware);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
새 동작
.NET 6+ 애플리케이션의 새 애플리케이션 진입점은 다음과 같습니다.
namespace MyApp;
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
ApplicationConfiguration.Initialize();
Application.Run(new Form1());
}
}
ApplicationConfiguration.Initialize()
는 Roslyn 컴파일러에서 생성된 임시 API입니다(원본 생성기를 통해). 이 메서드는 원래 템플릿에 있던 것과 동일한 호출을 내보냅니다. 다음 MSBuild 속성을 설정하여 이 API의 동작을 구성할 수 있습니다.
- ApplicationDefaultFont
- ApplicationHighDpiMode
- ApplicationUseCompatibleTextRendering(애플리케이션 사용 호환 텍스트 렌더링)
- ApplicationVisualStyles
속성을 명시적으로 구성하지 않으면 다음 코드가 런타임에 실행됩니다.
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// ApplicationConfiguration.Initialize() will emit the following calls:
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.SetHighDpiMode(HighDpiMode.SystemAware);
Application.Run(new Form1());
}
}
범주 변경
이 변경 내용은 원본 호환성에 영향을 줍니다.
변경 이유
애플리케이션 부트스트랩 기능은 다음과 같습니다.
- Windows Forms 디자이너에서 기본 설정 글꼴로 디자인 화면을 렌더링할 수 있습니다.
- 템플릿의 상용구 코드를 줄입니다.
권장 작업
동일한 원본을 사용하여 여러 TFM을 대상으로 하는 애플리케이션을 빌드하는 경우 다음 중 하나를 수행할 수 있습니다.
원래 코드의
ApplicationConfiguration.Initialize();
호출로 교체하고,Application.SetDefaultFont
API에 대한 디자이너 지원을 잃게 됩니다.지시문을 사용합니다
#if...#endif
. 예를 들면 다음과 같습니다.#if NET6_0_OR_GREATER ApplicationConfiguration.Initialize(); #else Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.SetHighDpiMode(HighDpiMode.SystemAware); #endif
영향을 받는 API
해당 없음(N/A)
.NET