次の方法で共有


C# テンプレートでアプリケーション ブートストラップが使用される

.NET ワークロードの関連する変更に合わせて、C# 用の Windows フォーム テンプレートが更新され、global using ディレクティブ、ファイル スコープの名前空間、および null 許容参照型がサポートされています。 一般的な Windows フォーム アプリは、Form1.csやForm1.Designer.csなど、複数のファイルに分割された複数の種類で構成されているため、最上位レベルのステートメントは Windows フォーム テンプレートには特に存在しません。 ただし、更新されたテンプレートには、アプリケーションブートストラップコードが含まれています。 以前のバージョンの .NET をターゲットにしている場合、互換性が低下する可能性があります。

導入されたバージョン

.NET 6 RC 1

以前の動作

Windows フォーム アプリケーションのエントリ ポイントは次のようになります。

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 です。 このメソッドは、元のテンプレートと同じ呼び出しを出力します。 この API の動作は、次の MSBuild プロパティを設定することで構成できます。

プロパティを明示的に構成しない場合は、実行時に次のコードが実行されます。

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 フォーム デザイナーでデザイン サーフェイスを優先フォントでレンダリングできるようにします。
  • テンプレート内の定型コードを減らします。

複数の 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

なし