Freigeben über


Grundlegende Änderungen in .NET Core 2.1

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

.NET-Kernbibliotheken

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

APIs, die Dateipfade umfassen, validieren keine Pfadzeichen mehr und werfen ein ArgumentException aus, wenn ein ungültiges Zeichen gefunden wird.

Änderungsbeschreibung

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

Grund für Änderung

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

Eingeführt in Version

.NET Core 2.1

Wenn Ihr Code auf diese APIs angewiesen ist, um ungültige Zeichen zu prüfen, können Sie einen Aufruf hinzufügen Path.GetInvalidPathChars.

Betroffene APIs

Siehe auch


Private Felder, die zu eingebauten Strukturtypen hinzugefügt werden

Private Felder wurden bestimmten Strukturtypen in Referenzassemblys hinzugefügt. Daher müssen diese Strukturtypen in C# immer mithilfe des neuen Operators oder standardliteral instanziiert werden.

Änderungsbeschreibung

In .NET Core 2.0 und früheren Versionen konnten einige bereitgestellte Strukturtypen, wie zum Beispiel ConsoleKeyInfo, ohne den new Operator oder das Standardliteral in C# instanziiert werden. Dies liegt daran, dass die vom C#-Compiler verwendeten Referenzassemblys nicht die privaten Felder für die Strukturen enthalten. Alle privaten Felder für .NET-Strukturtypen werden den Referenzassemblys ab .NET Core 2.1 hinzugefügt.

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

ConsoleKeyInfo key;    // Struct type

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

In .NET Core 2.1 führt der vorherige Code zum folgenden Compilerfehler: CS0165 – Verwendung der nicht zugewiesenen lokalen Variablen "key"

Eingeführt in Version

2.1

Instanziieren Sie Strukturtypen mithilfe des new Operators oder des Standardliterals.

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

.NET-Kernbibliotheken

Betroffene APIs


OpenSSL-Versionen unter macOS

Die .NET Core 3.0 und spätere Runtimes auf macOS bevorzugen jetzt OpenSSL 1.1.x-Versionen statt OpenSSL 1.0.x-Versionen für die Typen AesCcm, AesGcm, DSAOpenSsl, ECDiffieHellmanOpenSsl, ECDsaOpenSsl, RSAOpenSsl und SafeEvpPKeyHandle.

Die .NET Core 2.1-Laufzeit unterstützt jetzt OpenSSL 1.1.x-Versionen, bevorzugt jedoch weiterhin OpenSSL 1.0.x-Versionen.

Änderungsbeschreibung

Zuvor verwendete die .NET Core-Laufzeit OpenSSL 1.0.x-Versionen unter macOS für Typen, die mit OpenSSL interagieren. Die neueste OpenSSL 1.0.x-Version, OpenSSL 1.0.2, ist jetzt nicht mehr unterstützt. Um Typen beizubehalten, die OpenSSL für unterstützte Versionen von OpenSSL verwenden, verwenden die .NET Core 3.0- und höher-Laufzeiten jetzt neuere Versionen von OpenSSL unter macOS.

Bei dieser Änderung lautet das Verhalten für die .NET Core-Runtimes unter macOS wie folgt:

  • Die Laufzeiten von .NET Core 3.0 und höher verwenden OpenSSL 1.1.x( falls verfügbar) und greifen nur dann auf OpenSSL 1.0.x zurück, wenn keine Version von 1.1.x verfügbar ist.

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

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

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

Eingeführt in Version

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

Kategorie

.NET-Kernbibliotheken

Betroffene APIs


MSBuild

Project-Tools jetzt im SDK enthalten

Das .NET Core 2.1 SDK enthält jetzt allgemeine CLI-Tools, und Sie müssen nicht mehr auf diese Tools aus dem Projekt verweisen.

Änderungsbeschreibung

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

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

Wert <DotNetCliToolReference> Werkzeug
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

Entfernen Sie die <DotNetCliToolReference> Einstellung aus Ihrem Projekt.

Kategorie

MSBuild

Betroffene APIs

Nicht verfügbar


Siehe auch