Sdílet prostřednictvím


Šablony jazyka C# používají metodu bootstrap aplikace.

V souladu se souvisejícími změnami úloh .NET byly šablony model Windows Forms pro jazyk C# aktualizovány tak, aby podporovaly global using direktivy, obory názvů v oboru souborů a odkazové typy s možnou hodnotou null. Vzhledem k tomu, že typická model Windows Forms aplikace se skládá z více typů rozdělených mezi více souborů, například Form1.cs a Form1.Designer.cs, chybí v šablonách model Windows Forms zejména příkazy nejvyšší úrovně. Aktualizované šablony však zahrnují kód bootstrap aplikace. To může způsobit nekompatibilitu, pokud cílíte na starší verzi .NET.

Zavedená verze

.NET 6 RC 1

Staré chování

Vstupní bod aplikace model Windows Forms vypadal takto:

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

Nové chování

Nový vstupní bod aplikace pro aplikaci .NET 6 nebo novější vypadá takto:

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() je dočasné rozhraní API vytvořené kompilátorem Roslyn (prostřednictvím zdrojových generátorů). Tato metoda generuje stejná volání jako původní šablony. Chování tohoto rozhraní API můžete nakonfigurovat nastavením následujících vlastností nástroje MSBuild:

Pokud explicitně nenakonfigurujete žádné vlastnosti, spustí se za běhu následující kód:

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 změny

Tato změna má vliv na kompatibilitu zdroje.

Důvod změny

Funkce bootstrap aplikace:

  • Umožňuje návrháři model Windows Forms vykreslit návrhovou plochu v upřednostňovaném písmu.
  • Redukuje často používaný kód v šablonách.

Pokud se stejný zdroj používá k sestavení aplikace, která cílí na více TFM, můžete provést jednu z těchto věcí:

  • ApplicationConfiguration.Initialize(); Nahraďte volání původním kódem (a ztratíte podporu návrháře pro Application.SetDefaultFont rozhraní API).

  • Direktivy use #if...#endif , například:

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

Ovlivněná rozhraní API