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:
- ApplicationDefaultFont
- ApplicationHighDpiMode
- ApplicationUseCompatibleTextRendering
- ApplicationVisualStyles
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.
Empfohlene Aktion
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 dieApplication.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
–