Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En consonancia con los cambios relacionados en las cargas de trabajo de .NET, las plantillas de Windows Forms para C# se han actualizado a fin de admitir directivas global using
, espacios de nombres con ámbito de archivo y tipos de referencia que aceptan valores NULL. Dado que una aplicación típica de Windows Forms consta de varios tipos divididos entre varios archivos, por ejemplo, Form1.cs y Form1.Designer.cs, las instrucciones de nivel superior están especialmente ausentes de las plantillas de Windows Forms. Sin embargo, las plantillas actualizadas incluyen código de arranque de la aplicación. Esto puede provocar incompatibilidad si tiene como destino una versión anterior de .NET.
Versión introducida
.NET 6 RC 1
Comportamiento anterior
Un punto de entrada de aplicación de Windows Forms tiene el siguiente aspecto:
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());
}
}
}
Nuevo comportamiento
El nuevo punto de entrada de aplicación para una aplicación de .NET 6+ tiene este aspecto:
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()
es una API efímera producida por el compilador de Roslyn (a través de generadores de origen). Este método emite las mismas llamadas que tenían las plantillas originales. Puede configurar el comportamiento de esta API estableciendo las siguientes propiedades de MSBuild:
- ApplicationDefaultFont
- ApplicationHighDpiMode
- UsoDeRepresentaciónDeTextoCompatibleEnAplicaciones
- ApplicationVisualStyles
Si no configura explícitamente ninguna propiedad, el código siguiente se ejecuta en tiempo de ejecución:
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());
}
}
Cambiar categoría
Este cambio afecta a la compatibilidad de origen.
Motivo del cambio
La característica de arranque de la aplicación:
- Permite al diseñador de Windows Forms representar la superficie de diseño en la fuente preferida.
- Reduce el código reutilizable en las plantillas.
Acción recomendada
Si se usa el mismo origen para compilar una aplicación destinada a varios TFM, puede realizar una de las acciones siguientes:
Reemplace la llamada
ApplicationConfiguration.Initialize();
por el código original (y perderá el soporte del diseñador para la APIApplication.SetDefaultFont
).Utilice directivas
#if...#endif
, por ejemplo:#if NET6_0_OR_GREATER ApplicationConfiguration.Initialize(); #else Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.SetHighDpiMode(HighDpiMode.SystemAware); #endif
Las APIs afectadas
No disponible