C# 템플릿이 애플리케이션 부트스트랩을 사용함
.NET 워크로드의 관련 변경에 따라 #C의 Windows Forms 템플릿이 global using
지시문, 파일 범위 네임스페이스 및 Null 허용 참조 형식을 지원하도록 업데이트되었습니다. 일반적인 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