.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 プロパティを設定することで構成できます。
- 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 フォーム デザイナーでデザイン サーフェイスを優先フォントでレンダリングできるようにします。
- テンプレート内の定型コードを減らします。
推奨されるアクション
複数の TFM を対象とするアプリケーションをビルドするために同じソースを使用する場合は、次のいずれかの操作を実行できます。
ApplicationConfiguration.Initialize();呼び出しを元のコードに置き換えます (Application.SetDefaultFontAPI のデザイナーのサポートが失われます)。#if...#endifディレクティブを使用します。次に例を示します。#if NET6_0_OR_GREATER ApplicationConfiguration.Initialize(); #else Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.SetHighDpiMode(HighDpiMode.SystemAware); #endif
影響を受ける API
なし
.NET