Auf Englisch lesen

Freigeben über


Breaking Changes in .NET Core 2.1

Wenn Sie Version 2.1 von .NET Core migrieren, können sich die in diesem Artikel aufgeführten Breaking Changes auf Ihre App auswirken.

Core .NET-Bibliotheken

Pfad-APIs lösen keine Ausnahme für ungültige Zeichen aus

APIs, die Dateipfade enthalten, überprüfen Pfadzeichen nicht mehr und lösen auch keine ArgumentException mehr aus, wenn ein ungültiges Zeichen gefunden wird.

Beschreibung der Änderung

In .NET Framework und .NET Core 1.0 bis 2.0 lösen die im Abschnitt Betroffene APIs aufgeführten Methoden eine ArgumentException-Instanz aus, wenn das Pfadargument ein ungültiges Pfadzeichen enthält. Ab .NET Core 2.1 überprüfen diese Methoden nicht mehr auf ungültige Pfadzeichen und sie lösen keine Ausnahme mehr aus, wenn ein ungültiges Zeichen gefunden wird.

Grund für die Änderung

Die aggressive Validierung von Pfadzeichen blockiert einige plattformübergreifende Szenarios. Diese Änderung wurde eingeführt, damit .NET nicht versucht, das Ergebnis von Betriebssystem-API-Aufrufen zu replizieren oder vorherzusagen. Weitere Informationen finden Sie im Blogbeitrag Vorschau für System.IO in .NET Core 2.1.

Eingeführt in Version

.NET Core 2.1

Wenn Ihr Code sich auf diese APIs verlassen hat, um nach ungültigen Zeichen zu suchen, können Sie einen Aufruf von Path.GetInvalidPathChars hinzufügen.

Betroffene APIs

Siehe auch


Private Felder, die integrierten Strukturtypen hinzugefügt werden

Private Felder wurden zu bestimmten Strukturtypen in Referenzassemblys hinzugefügt. Folglich müssen diese Strukturtypen in C# immer unter Verwendung des neuen Operators oder Standardliterals instanziiert werden.

Änderungsbeschreibung

In .NET Core 2.0 und früheren Versionen konnten einige bereitgestellte Strukturtypen (z. B. ConsoleKeyInfo) instanziiert werden, ohne den new-Operator oder das Standardliteral in C# zu verwenden. Dies war darauf zurückzuführen, dass die vom C#-Compiler verwendeten Verweisassemblys nicht die privaten Felder für die Strukturen enthielten. Alle privaten Felder für .NET-Strukturtypen werden den Verweisassemblys ab .NET Core 2.1 hinzugefügt.

Der folgende C# Code wird z. B. in .NET Core 2.0 kompiliert, nicht jedoch in .NET Core 2.1:

ConsoleKeyInfo key;    // Struct type

if (key.ToString() == "y")
{
    Console.WriteLine("Yes!");
}

In .NET Core 2.1 führt der Code oben zu folgendem Compilerfehler: CS0165: Verwendung der nicht zugewiesenen lokalen Variablen „key“

Eingeführt in Version

2.1

Empfohlene Aktion

Instanziieren Sie Strukturtypen mit dem new-Operator oder Standardliteral.

Zum Beispiel:

ConsoleKeyInfo key = new ConsoleKeyInfo();    // Struct type.

if (key.ToString() == "y")
    Console.WriteLine("Yes!");
ConsoleKeyInfo key = default;    // Struct type.

if (key.ToString() == "y")
    Console.WriteLine("Yes!");

Kategorie

Core .NET-Bibliotheken

Betroffene APIs


OpenSSL-Versionen unter macOS

Die Runtimes von .NET Core 3.0 und höher unter macOS bevorzugen jetzt OpenSSL 1.1.x-Versionen gegenüber OpenSSL 1.0.x-Versionen für die Typen AesCcm, AesGcm, DSAOpenSsl, ECDiffieHellmanOpenSsl, ECDsaOpenSsl, RSAOpenSsl und SafeEvpPKeyHandle.

Die .NET Core 2.1-Runtime unterstützt jetzt OpenSSL 1.1.x-Versionen, bevorzugt aber immer noch OpenSSL 1.0.x-Versionen.

Änderungsbeschreibung

Zuvor verwendete die .NET Core-Runtime OpenSSL 1.0.x-Versionen unter macOS für Typen, die mit OpenSSL interagieren. Die neueste Version von OpenSSL 1.0.x, OpenSSL 1.0.2, wird jetzt nicht mehr unterstützt. Um Typen, die OpenSSL auf unterstützten Versionen von OpenSSL verwenden, beizubehalten, verwenden die .NET Core 3.0 und spätere Runtimes jetzt neuere Versionen von OpenSSL unter macOS.

Mit dieser Änderung sieht das Verhalten für die .NET Core-Runtimes unter macOS wie folgt aus:

  • Die Runtimes von .NET Core 3.0 und höheren Versionen verwenden OpenSSL 1.1.x, falls verfügbar, und greifen nur dann auf OpenSSL 1.0.x zurück, wenn keine 1.1.x-Version verfügbar ist.

    Für Aufrufer, die die OpenSSL-Interop-Typen mit benutzerdefinierten P/Invokes verwenden, befolgen Sie die Anleitung in den SafeEvpPKeyHandle.OpenSslVersion-Anweisungen. Ihre App stürzt möglicherweise ab, wenn Sie den OpenSslVersion-Wert nicht überprüfen.

  • Die Runtime von .NET Core 2.1 verwendet OpenSSL 1.0.x, falls verfügbar, und greift auf OpenSSL 1.1.x zurück, wenn keine 1.0.x-Version verfügbar ist.

    Die 2.1-Runtime bevorzugt die frühere Version von OpenSSL, da die SafeEvpPKeyHandle.OpenSslVersion-Eigenschaft in .NET Core 2.1 nicht existiert, sodass die OpenSSL-Version zur Laufzeit nicht zuverlässig ermittelt werden kann.

Eingeführt in Version

  • .NET Core 2.1.16
  • .NET Core 3.0.3
  • .NET Core 3.1.2

Empfohlene Aktion

Kategorie

Core .NET-Bibliotheken

Betroffene APIs


MSBuild

Jetzt im SDK enthaltene Projekttools

Das SDK für .NET Core 2.1 enthält nun gängige CLI-Tools, auf die nun nicht mehr im Projekt verwiesen werden muss.

Änderungsbeschreibung

In .NET Core 2.0 verweisen Projekte mit der Projekteinstellung <DotNetCliToolReference> auf externe .NET-Tools. In .NET Core 2.1 sind einige dieser Tools im .NET Core SDK enthalten, weshalb die Einstellung nicht mehr erforderlich ist. Wenn Sie Verweise auf diese Tools in Ihr Projekt aufnehmen, erhalten Sie eine Fehlermeldung ähnlich der folgenden: Das Tool "Microsoft.EntityFrameworkCore.Tools.DotNet" ist jetzt im .NET Core SDK enthalten.

Tools, die jetzt im SDK für .NET Core 2.1 enthalten sind:

Wert <DotNetCliToolReference> Tool
Microsoft.DotNet.Watcher.Tools dotnet-watch
Microsoft.Extensions.SecretManager.Tools dotnet-user-secrets
Microsoft.Extensions.Caching.SqlConfig.Tools dotnet-sql-cache
Microsoft.EntityFrameworkCore.Tools.DotNet dotnet-ef

Eingeführt in Version

.NET Core SDK 2.1.300

Empfohlene Maßnahme

Entfernen Sie die Einstellung <DotNetCliToolReference> aus Ihrem Projekt.

Kategorie

MSBuild

Betroffene APIs

Nicht zutreffend


Siehe auch