Neuerungen in .NET Core 2.2What's new in .NET Core 2.2

.NET Core 2.2 enthält Verbesserungen für die Anwendungsbereitstellung, für die Ereignisbehandlung für Runtimedienste, für die Authentifizierung bei Azure SQL-Datenbanken, für die JIT-Compilerleistung und bei der Codeeinführung vor dem Einfügen der Main-Methode..NET Core 2.2 includes enhancements in application deployment, event handling for runtime services, authentication to Azure SQL databases, JIT compiler performance, and code injection prior to the execution of the Main method.

Neuer BereitstellungsmodusNew deployment mode

Ab .NET Core 2.2 können Sie frameworkabhängige ausführbare Dateien bereitstellen, die .exe-Dateien anstelle von .dll-Dateien sind.Starting with .NET Core 2.2, you can deploy framework-dependent executables, which are .exe files instead of .dll files. Frameworkabhängige ausführbare Dateien (FDE) funktionieren ähnlich wie frameworkabhängige Bereitstellungen, benötigen aber zur Ausführung eine freigegebene Version von .NET Core für das gesamte System.Functionally similar to framework-dependent deployments, framework-dependent executables (FDE) still rely on the presence of a shared system-wide version of .NET Core to run. Ihre Anwendung enthält nur Code und alle Drittanbieterabhängigkeiten.Your app contains only your code and any third-party dependencies. Im Gegensatz zu frameworkabhängigen Bereitstellungen sind FDEs plattformspezifisch.Unlike framework-dependent deployments, FDEs are platform-specific.

Dieser neue Bereitstellungsmodus hat den entscheidenden Vorteil, dass Sie eine ausführbare Datei anstelle einer Bibliothek erstellen, was bedeutet, dass Sie Ihre Anwendung direkt ausführen können, ohne vorher dotnet aufzurufen.This new deployment mode has the distinct advantage of building an executable instead of a library, which means you can run your app directly without invoking dotnet first.

KernspeicherCore

Behandeln von Ereignissen in RuntimedienstenHandling events in runtime services

Möglicherweise möchten Sie die Nutzung von Runtimediensten wie GC, JIT und ThreadPool durch Ihre Anwendung überwachen, um zu verstehen, wie sich diese auf Ihre Anwendung auswirken.You may often want to monitor your application's use of runtime services, such as the GC, JIT, and ThreadPool, to understand how they impact your application. Auf Windows-Systemen geschieht dies in der Regel durch die Überwachung der ETW-Ereignisse des aktuellen Prozesses. On Windows systems, this is commonly done by monitoring the ETW events of the current process. Obwohl dies weiterhin gut funktioniert, ist es nicht immer möglich, ETW zu verwenden, wenn Sie in einer Umgebung mit niedriger Priorität oder unter Linux oder macOS arbeiten. While this continues to work well, it's not always possible to use ETW if you're running in a low-privilege environment or on Linux or macOS. 

Ab .NET Core 2.2 können CoreCLR-Ereignisse nun über die System.Diagnostics.Tracing.EventListener-Klasse genutzt werden.Starting with .NET Core 2.2, CoreCLR events can now be consumed using the System.Diagnostics.Tracing.EventListener class. Diese Ereignisse beschreiben das Verhalten der Runtimedienste wie GC, JIT-Kompilierung, ThreadPool und Interop.These events describe the behavior of such runtime services as GC, JIT, ThreadPool, and interop. Dies sind die gleichen Ereignisse wie bei Teilen des CoreCLR ETW-Anbieters.These are the same events that are exposed as part of the CoreCLR ETW provider.  Dies ermöglicht es Anwendungen, diese Ereignisse zu verarbeiten oder einen Transportmechanismus zu nutzen, um sie an einen Telemetrieaggregationsdienst zu senden.  This allows for applications to consume these events or use a transport mechanism to send them to a telemetry aggregation service. Im folgenden Codebeispiel wird erläutert, wie Sie Ereignisse abonnieren:You can see how to subscribe to events in the following code sample:

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

.NET Core 2.2 fügt der EventWrittenEventArgs-Klasse die folgenden beiden Eigenschaften hinzu, um zusätzliche Informationen über ETW-Ereignisse bereitzustellen:In addition, .NET Core 2.2 adds the following two properties to the EventWrittenEventArgs class to provide additional information about ETW events:

DatenData

AAD-Authentifizierung bei Azure SQL-Datenbanken mit der SqlConnection.AccessToken-EigenschaftAAD authentication to Azure SQL databases with the SqlConnection.AccessToken property

Ab .NET Core 2.2 kann ein von Azure Active Directory ausgegebenes Zugriffstoken zur Authentifizierung bei einer Azure SQL-Datenbank verwendet werden.Starting with .NET Core 2.2, an access token issued by Azure Active Directory can be used to authenticate to an Azure SQL database. Zur Unterstützung von Zugriffstoken wurde die Eigenschaft AccessToken zur SqlConnection-Klasse hinzugefügt.To support access tokens, the AccessToken property has been added to the SqlConnection class. Um die Vorteile der AAD-Authentifizierung zu nutzen, laden Sie die Version 4.6 des NuGet-Pakets „System.Data.SqlClient“ herunter.To take advantage of AAD authentication, download version 4.6 of the System.Data.SqlClient NuGet package. Um dieses Feature zu nutzen, können Sie den Wert des Zugriffstokens über die Active Directory-Authentifizierungsbibliothek für .NET beziehen, die im NuGet-Paket Microsoft.IdentityModel.Clients.ActiveDirectory enthalten ist.In order to use the feature, you can obtain the access token value using the Active Directory Authentication Library for .NET contained in the Microsoft.IdentityModel.Clients.ActiveDirectory NuGet package.

Verbesserungen am JIT-CompilerJIT compiler improvements

Mehrstufige Kompilierung bleibt ein abonnierbares FeatureTiered compilation remains an opt-in feature

Der JIT-Compiler implementierte in .NET Core 2.1 eine neue Compilertechnologie, mehrstufige Kompilierung, als abonnierbares Feature.In .NET Core 2.1, the JIT compiler implemented a new compiler technology, tiered compilation, as an opt-in feature. Damit soll eine Leistungssteigerung erzielt werden.The goal of tiered compilation is improved performance. Eine der wichtigen Aufgaben, die vom JIT-Compiler ausgeführt werden, ist die Optimierung der Ausführung des Codes.One of the important tasks performed by the JIT compiler is optimizing code execution. Für wenig genutzte Codepfade muss der Compiler jedoch möglicherweise mehr Zeit zur Optimierung des Codes aufbringen, als die Runtime zur Ausführung nicht optimierten Codes benötigt.For little-used code paths, however, the compiler may spend more time optimizing code than the runtime spends executing unoptimized code. Die mehrstufige Kompilierung unterteilt die JIT-Kompilierung in zwei Phasen:Tiered compilation introduces two stages in JIT compilation:

  • Eine erste Stufe, die so schnell wie möglich Code generiert.A first tier, which generates code as quickly as possible.

  • Eine zweite Stufe, die optimiertem Code für Methoden generiert, die häufig ausgeführt werden.A second tier, which generates optimized code for those methods that are executed frequently. Die zweite Stufe der Kompilierung wird parallel zum Verbessern der Leistung ausgeführt.The second tier of compilation is performed in parallel for enhanced performance.

Informationen zur Leistungssteigerung, die sich aus der mehrstufigen Kompilierung ergeben kann, finden Sie unter Ankündigung zu .NET Core 2.2 Vorschauversion 2.For information on the performance improvement that can result from tiered compilation, see Announcing .NET Core 2.2 Preview 2.

In .NET Core 2.2 Vorschauversion 2 wurde die mehrstufige Kompilierung standardmäßig aktiviert.In .NET Core 2.2 Preview 2, tiered compilation was enabled by default. Allerdings haben wir entschieden, dass wir noch nicht bereit sind, die mehrstufige Kompilierung standardmäßig zu aktivieren.However, we've decided that we are still not ready to enable tiered compilation by default. Daher bleibt die mehrstufigen Kompilierung in .NET Core 2.2 weiterhin ein abonnierbares Feature.So in .NET Core 2.2, tiered compilation continues to be an opt-in feature. Informationen zum Abonnieren der mehrstufigen Kompilierung finden Sie unter Verbesserungen am Jit-Compiler in Neuerungen in .NET Core 2.1.For information on opting in to tiered compilation, see Jit compiler improvements in What's new in .NET Core 2.1.

LaufzeitRuntime

Einfügen von Code vor der Ausführung der Main-MethodeInjecting code prior to executing the Main method

Ab .NET Core 2.2 können Sie einen Startuphook verwenden, um Code vor der Ausführung der Main-Methode einer Anwendung einzufügen.Starting with .NET Core 2.2, you can use a startup hook to inject code prior to running an application's Main method. Startuphooks ermöglichen es einem Host, das Verhalten von Anwendungen nach dem Bereitstellung anzupassen, ohne die Anwendung neu kompilieren oder ändern zu müssen.Startup hooks make it possible for a host to customize the behavior of applications after they have been deployed without needing to recompile or change the application.

Wir erwarten von Hostinganbietern, dass sie benutzerdefinierte Konfigurationen und Richtlinien definieren, einschließlich Einstellungen, die das Ladeverhalten des Haupteinstiegspunktes potenziell beeinflussen, wie beispielsweise das Verhalten  System.Runtime.Loader.AssemblyLoadContext .We expect hosting providers to define custom configuration and policy, including settings that potentially influence the load behavior of the main entry point, such as the System.Runtime.Loader.AssemblyLoadContext behavior. Der Hook kann verwendet werden, um die Ablaufverfolgung oder Telemetrieinjektion einzurichten, Rückrufe zur Handhabung einzurichten oder um ein anderes umgebungsabhängiges Verhalten zu definieren.The hook can be used to set up tracing or telemetry injection, to set up callbacks for handling, or to define other environment-dependent behavior. Der Hook ist vom Einstiegspunkt getrennt, sodass der Benutzercode nicht geändert werden muss.The hook is separate from the entry point, so that user code doesn't need to be modified.

Weitere Informationen finden Sie unter Hoststartuphook.See Host startup hook for more information.

Siehe auchSee also