다음을 통해 공유


C# 템플릿이 애플리케이션 부트스트랩을 사용함

.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의 동작을 구성할 수 있습니다.

속성을 명시적으로 구성하지 않으면 다음 코드가 런타임에 실행됩니다.

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)