C#-Vorlagen verwenden das Bootstrap der Anwendung

In Übereinstimmung mit verwandten Änderungen in .NET-Workloads wurden Windows Forms-Vorlagen für C# aktualisiert, um Direktiven, Dateibereichsnamespaces und nullfähige Verweistypen zu unterstützen global using . Da eine typische Windows Forms-App aus mehreren Typen besteht, die über mehrere Dateien aufgeteilt werden, z. B. Form1.cs und Form1.Designer.cs, fehlen insbesondere Anweisungen auf oberster Ebene von den Windows Forms-Vorlagen. Die aktualisierten Vorlagen enthalten jedoch Anwendungs-Bootstrap-Code. Dies kann zu Inkompatibilität führen, wenn Sie auf eine frühere Version von .NET abzielen.

Eingeführte Version

.NET 6 RC 1

Altes Verhalten

Ein Einstiegspunkt der Windows Forms-Anwendung sieht wie folgt aus:

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());
        }
    }
}

Neues Verhalten

Der neue Einstiegspunkt für eine .NET 6+-Anwendung sieht wie folgt aus:

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() ist eine ephemerale API, die vom Roslyn-Compiler (über Quellgeneratoren) erstellt wird. Diese Methode gibt dieselben Aufrufe aus, die die ursprünglichen Vorlagen hatten. Sie können das Verhalten dieser API konfigurieren, indem Sie die folgenden MSBuild-Eigenschaften festlegen:

Wenn Sie keine Eigenschaften explizit konfigurieren, wird der folgende Code zur Laufzeit ausgeführt:

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());
    }
}

Kategorie ändern

Diese Änderung wirkt sich auf die Quellkompatibilität aus.

Grund für Änderung

Das Bootstrap-Feature der Anwendung:

  • Ermöglicht dem Windows Forms-Designer das Rendern der Entwurfsoberfläche in der bevorzugten Schriftart.
  • Es reduziert Codebausteine in den Vorlagen.

Wenn dieselbe Quelle verwendet wird, um eine Anwendung zu erstellen, die auf mehrere TFMs ausgerichtet ist, können Sie eine der folgenden Aktionen ausführen:

  • Ersetzen Sie den ApplicationConfiguration.Initialize();-Aufruf durch den ursprünglichen Code (und deaktivieren Sie die Designerunterstützung für die Application.SetDefaultFont-API).

  • Verwenden Sie beispielsweise #if...#endif-Direktiven:

    #if NET6_0_OR_GREATER
            ApplicationConfiguration.Initialize();
    #else
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.SetHighDpiMode(HighDpiMode.SystemAware);
    #endif
    

Betroffene APIs

Nicht verfügbar