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.
.NET Core 2.2 incluye mejoras en la implementación de aplicaciones, el control de eventos para los servicios en tiempo de ejecución, la autenticación en bases de datos de Azure SQL, el rendimiento del compilador JIT y la inyección de código antes de la ejecución del Main
método.
Nuevo modo de implementación
A partir de .NET Core 2.2, puede implementar archivos ejecutables dependientes del marco, que son archivos.exe en lugar de archivos.dll . Funcionalmente similar a las implementaciones dependientes del marco, los ejecutables dependientes del marco (FDE) siguen confiando en la presencia de una versión compartida en todo el sistema de .NET Core para ejecutarse. La aplicación contiene solo tu código y las dependencias de terceros. A diferencia de las implementaciones dependientes del marco, los FDE son específicos de la plataforma.
Este nuevo modo de implementación tiene la ventaja distinta de compilar un archivo ejecutable en lugar de una biblioteca, lo que significa que puede ejecutar la aplicación directamente sin invocar dotnet
primero.
Núcleo
Control de eventos en servicios en tiempo de ejecución
A menudo, puede supervisar el uso de servicios en tiempo de ejecución de la aplicación, como GC, JIT y ThreadPool, para comprender cómo afectan a la aplicación. En los sistemas Windows, esto suele hacerse mediante la supervisión de los eventos ETW del proceso actual. Aunque esto sigue funcionando bien, no siempre es posible usar ETW si se ejecuta en un entorno con pocos privilegios o en Linux o macOS.
A partir de .NET Core 2.2, los eventos CoreCLR ahora se pueden consumir mediante la System.Diagnostics.Tracing.EventListener clase . Estos eventos describen el comportamiento de estos servicios en tiempo de ejecución como GC, JIT, ThreadPool e interoperabilidad. Estos son los mismos eventos que se exponen como parte del proveedor ETW de CoreCLR. Esto permite que las aplicaciones consuman estos eventos o usen un mecanismo de transporte para enviarlos a un servicio de agregación de telemetría. Puede ver cómo suscribirse a eventos en el ejemplo de código siguiente:
internal sealed class SimpleEventListener : EventListener
{
// Called whenever an EventSource is created.
protected override void OnEventSourceCreated(EventSource eventSource)
{
// Watch for the .NET runtime EventSource and enable all of its events.
if (eventSource.Name.Equals("Microsoft-Windows-DotNETRuntime"))
{
EnableEvents(eventSource, EventLevel.Verbose, (EventKeywords)(-1));
}
}
// Called whenever an event is written.
protected override void OnEventWritten(EventWrittenEventArgs eventData)
{
// Write the contents of the event to the console.
Console.WriteLine($"ThreadID = {eventData.OSThreadId} ID = {eventData.EventId} Name = {eventData.EventName}");
for (int i = 0; i < eventData.Payload.Count; i++)
{
string payloadString = eventData.Payload[i]?.ToString() ?? string.Empty;
Console.WriteLine($"\tName = \"{eventData.PayloadNames[i]}\" Value = \"{payloadString}\"");
}
Console.WriteLine("\n");
}
}
Además, .NET Core 2.2 agrega las dos propiedades siguientes a la EventWrittenEventArgs clase para proporcionar información adicional sobre los eventos ETW:
Datos
Autenticación de AAD en bases de datos de Azure SQL con la propiedad SqlConnection.AccessToken
A partir de .NET Core 2.2, se puede usar un token de acceso emitido por Azure Active Directory para autenticarse en una base de datos de Azure SQL. Para admitir los tokens de acceso, se ha agregado la propiedad AccessToken a la clase SqlConnection. Para aprovechar la autenticación de AAD, descargue la versión 4.6 del paquete NuGet System.Data.SqlClient. Para usar la característica, puede obtener el valor del token de acceso mediante la biblioteca de autenticación de Active Directory para .NET contenida en el Microsoft.IdentityModel.Clients.ActiveDirectory
paquete NuGet.
Mejoras del compilador JIT
La compilación por niveles sigue siendo una función opcional
En .NET Core 2.1, el compilador JIT implementó una nueva tecnología del compilador, compilación por niveles, como una característica de participación. El objetivo de la compilación en capas es mejorar el rendimiento. Una de las tareas importantes realizadas por el compilador JIT es optimizar la ejecución de código. Sin embargo, en el caso de las rutas de acceso de código poco usadas, el compilador puede dedicar más tiempo a optimizar el código que el tiempo de ejecución tarda en ejecutar código no optimizado. La compilación por niveles incluye dos fases en la compilación JIT:
- Un primer nivel, que genera código lo más rápido posible.
- Segundo nivel, que genera código optimizado para esos métodos que se ejecutan con frecuencia. El segundo nivel de compilación se realiza en paralelo para mejorar el rendimiento.
Para obtener información sobre la mejora del rendimiento que puede resultar de la compilación en capas, consulte Anuncio de .NET Core 2.2 Preview 2.
Para obtener información sobre cómo participar en la compilación en niveles, consulte Mejoras del compilador jit en Novedades de .NET Core 2.1.
Tiempo de ejecución
Insertar código antes de ejecutar el método Main
A partir de .NET Core 2.2, puede usar un enlace de inicio para insertar código antes de ejecutar el método Main de una aplicación. Los enlaces de inicio permiten a un host personalizar el comportamiento de las aplicaciones después de implementarlas sin necesidad de volver a compilar ni cambiar la aplicación.
Esperamos que los proveedores de hospedaje definan la configuración personalizada y la política, incluida la configuración que podría influir en el comportamiento de carga del punto de entrada principal, como el comportamiento System.Runtime.Loader.AssemblyLoadContext. El enlace puede usarse para configurar la inyección de telemetría o el seguimiento, configurar las devoluciones de llamada para el control, así como definir otros comportamientos dependientes del entorno. El enlace es independiente del punto de entrada, por lo que no es necesario modificar el código de usuario.
Consulte Host startup hook (Hospedaje del enlace de inicio) para obtener más información.