C#-Vorlagen verwenden Anwendungsbootstrap

Im Einklang mit ähnlichen Änderungen in .NET-Workloads wurden Windows Forms-Vorlagen für C# aktualisiert, um global using-Anweisungen, Namespaces im Dateibereich und Verweistypen zu unterstützen, die NULL-Werte zu lassen. Da eine typische Windows Forms-App mehrere Typen enthält, die auf mehrere Dateien aufgeteilt sind, z. B. „Form1.cs“ und „Form1.Designer.cs“, fehlen Anweisungen der obersten Ebene in den Windows Forms-Vorlagen. Die aktualisierten Vorlagen enthalten jedoch Code für den Anwendungsbootstrap. Dies kann zu Inkompatibilität führen, wenn Sie eine frühere Version von .NET als Ziel verwenden.

Eingeführt in Version

.NET 6 RC 1

Altes Verhalten

Ein Windows Forms-Anwendungseinstiegspunkt 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 Anwendungseinstiegspunkt 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 kurzlebige API, die vom Roslyn-Compiler (über Quellgeneratoren) erzeugt wird. Diese Methode gibt die gleichen Aufrufe aus wie die ursprünglichen Vorlagen. Sie können das Verhalten dieser API konfigurieren, indem Sie die folgenden MSBuild Eigenschaften festlegen:

Wenn Sie keine Eigenschaften explizit konfigurieren, wird zur Laufzeit der folgende Code 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());
    }
}

Ändern der Kategorie

Diese Änderung kann sich auf die Quellkompatibilität auswirken.

Grund für die Änderung

Für das Feature für Anwendungsbootstraps gilt Folgendes:

  • Es ermöglicht dem Windows Forms-Designer, die Entwurfsoberfläche in der bevorzugten Schriftart zu rendern.
  • Es reduziert Codebausteine in den Vorlagen.

Wenn dieselbe Quelle zum Erstellen einer Anwendung verwendet wird, 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 entfernen Sie die Designer-Unterstützung für die Application.SetDefaultFont-API).

  • Verwenden Sie #if...#endif-Anweisungen, z. B.:

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

Betroffene APIs