I modelli C# usano bootstrap dell'applicazione
In linea con le modifiche correlate nei carichi di lavoro .NET, i modelli Windows Form per C# sono stati aggiornati per supportare direttive global using
, spazi dei nomi con ambito file e tipi di riferimento nullable. Poiché un'app Windows Forms tipica è costituita da più tipi suddivisi tra più file, ad esempio Form1.cs e Form1.Designer.cs, le istruzioni di primo livello sono notevolmente assenti dai modelli di Windows Form. Tuttavia, i modelli aggiornati includono il codice bootstrap dell'applicazione. Ciò può causare incompatibilità se si usa una versione precedente di .NET.
Versione di introduzione
.NET 6 RC 1
Comportamento precedente
Un punto di ingresso dell'applicazione Windows Forms ha un aspetto simile al seguente:
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());
}
}
}
Nuovo comportamento
Il nuovo punto di ingresso dell'applicazione per un'applicazione .NET 6+ è simile al seguente:
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()
è un'API temporanea prodotta dal compilatore Roslyn (tramite generatori di origine). Questo metodo genera le stesse chiamate che avevano i modelli originali. È possibile configurare il comportamento di questa API impostando le proprietà di MSBuild seguenti:
- ApplicationDefaultFont
- ApplicationHighDpiMode
- ApplicationUseCompatibleTextRendering
- ApplicationVisualStyles
Se non si configura esplicitamente alcuna proprietà, in fase di esecuzione viene eseguito il codice seguente:
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());
}
}
Categoria di modifiche
Questa modifica influisce sulla compatibilità dell'origine.
Motivo della modifica
La funzionalità bootstrap dell'applicazione:
- Consente alla finestra di progettazione di Windows Forms di eseguire il rendering dell'area di progettazione nel tipo di carattere preferito.
- Riduce il codice boilerplate nei modelli.
Azione consigliata
Se la stessa origine viene usata per compilare un'applicazione destinata a più TFM, è possibile eseguire una delle seguenti operazioni:
Sostituire la chiamata
ApplicationConfiguration.Initialize();
con il codice originale (e perdere il supporto della finestra di progettazione per l’APIApplication.SetDefaultFont
).Usare direttive
#if...#endif
, ad esempio:#if NET6_0_OR_GREATER ApplicationConfiguration.Initialize(); #else Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.SetHighDpiMode(HighDpiMode.SystemAware); #endif
API interessate
N/D