Udostępnij za pośrednictwem


Szablony języka C# używają uruchamiania aplikacji

Zgodnie z powiązanymi zmianami w obciążeniach platformy .NET szablony formularzy systemu Windows dla języka C# zostały zaktualizowane w celu obsługi global using dyrektyw, przestrzeni nazw o zakresie plików i typów odwołań dopuszczanych do wartości null. Ponieważ typowa aplikacja Windows Forms składa się z wielu typów podzielonych na wiele plików, na przykład Form1.cs i Form1. Projektant.cs instrukcje najwyższego poziomu są szczególnie nieobecne w szablonach formularzy systemu Windows. Zaktualizowane szablony zawierają jednak kod bootstrap aplikacji. Może to spowodować niezgodność, jeśli docelowa jest wcześniejsza wersja platformy .NET.

Wprowadzona wersja

.NET 6 RC 1

Stare zachowanie

Punkt wejścia aplikacji Windows Forms wyglądał następująco:

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

Nowe zachowanie

Nowy punkt wejścia aplikacji dla aplikacji .NET 6+ wygląda następująco:

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() jest efemerycznym interfejsem API utworzonym przez kompilator Roslyn (za pośrednictwem generatorów źródłowych). Ta metoda emituje te same wywołania, które miały oryginalne szablony. Zachowanie tego interfejsu API można skonfigurować, ustawiając następujące właściwości programu MSBuild:

Jeśli nie skonfigurujesz jawnie żadnych właściwości, w czasie wykonywania zostanie wykonany następujący kod:

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

Kategoria zmiany

Ta zmiana ma wpływ na zgodność ze źródłem.

Przyczyna wprowadzenia zmiany

Funkcja uruchamiania aplikacji:

  • Umożliwia projektantowi formularzy systemu Windows renderowanie powierzchni projektowej w preferowanej czcionki.
  • Zmniejsza standardowy kod w szablonach.

Jeśli to samo źródło jest używane do tworzenia aplikacji przeznaczonej dla wielu serwerów TFM, możesz wykonać jedną z następujących czynności:

  • Zastąp wywołanie ApplicationConfiguration.Initialize(); oryginalnym kodem (i utrac obsługę projektanta dla Application.SetDefaultFont interfejsu API).

  • Użyj #if...#endif dyrektyw, na przykład:

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

Dotyczy interfejsów API

Nie dotyczy