Istotne zmiany w programie .NET Core 2.1

Jeśli przeprowadzasz migrację do wersji 2.1 platformy .NET Core, zmiany powodujące niezgodność wymienione w tym artykule mogą mieć wpływ na twoją aplikację.

Podstawowe biblioteki platformy .NET

Interfejsy API ścieżki nie zgłaszają wyjątku dla nieprawidłowych znaków

Interfejsy API, które obejmują ścieżki plików, nie weryfikują już znaków ścieżki ani nie zgłaszają ArgumentException nieprawidłowego znaku.

Opis zmiany

W programach .NET Framework i .NET Core 1.0 – 2.0 metody wymienione w sekcji Objęte interfejsy API zgłaszają błąd ArgumentException , jeśli argument ścieżki zawiera nieprawidłowy znak ścieżki. Począwszy od platformy .NET Core 2.1, te metody nie sprawdzają już nieprawidłowych znaków ścieżki lub zgłaszają wyjątek w przypadku znalezienia nieprawidłowego znaku.

Przyczyna wprowadzenia zmiany

Agresywna walidacja znaków ścieżki blokuje niektóre scenariusze międzyplatformowe. Ta zmiana została wprowadzona tak, aby platforma .NET nie próbowała replikować ani przewidywać wyniku wywołań interfejsu API systemu operacyjnego. Aby uzyskać więcej informacji, zobacz wpis w blogu System.IO w programie .NET Core 2.1 sneak peek .

Wprowadzona wersja

.NET Core 2.1

Jeśli kod polegał na tych interfejsach API w celu sprawdzania nieprawidłowych znaków, możesz dodać wywołanie metody .Path.GetInvalidPathChars

Dotyczy interfejsów API

Zobacz też


Pola prywatne dodane do wbudowanych typów struktur

Pola prywatne zostały dodane do niektórych typów struktur w zestawach referencyjnych. W związku z tym w języku C# te typy struktur muszą być zawsze tworzone przy użyciu nowego operatora lub literału domyślnego.

Opis zmiany

W programie .NET Core 2.0 i poprzednich wersjach niektóre podane typy struktur, na przykład , ConsoleKeyInfomożna utworzyć wystąpienie bez użycia operatora lub domyślnego new literału w języku C#. Wynikało to z faktu, że zestawy odwołań używane przez kompilator języka C# nie zawierały pól prywatnych dla struktur. Wszystkie pola prywatne dla typów struktur platformy .NET są dodawane do zestawów referencyjnych, począwszy od platformy .NET Core 2.1.

Na przykład następujący kod języka C# kompiluje się na platformie .NET Core 2.0, ale nie na platformie .NET Core 2.1:

ConsoleKeyInfo key;    // Struct type

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

W programie .NET Core 2.1 poprzedni kod powoduje następujący błąd kompilatora: CS0165 — Użycie nieprzypisanej zmiennej lokalnej "key"

Wprowadzona wersja

2.1

Utwórz wystąpienie typów struktur przy użyciu operatora lub literału domyślnegonew.

Na przykład:

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

Kategoria

Podstawowe biblioteki platformy .NET

Dotyczy interfejsów API


Wersje protokołu OpenSSL w systemie macOS

Środowiska uruchomieniowe platformy .NET Core 3.0 i nowsze w systemie macOS preferują teraz wersje openSSL 1.1.x dla wersji OpenSSL 1.0.x dla AesCcmtypów , , AesGcm, DSAOpenSslECDiffieHellmanOpenSslECDsaOpenSsl, RSAOpenSsl, i SafeEvpPKeyHandle .

Środowisko uruchomieniowe platformy .NET Core 2.1 obsługuje teraz wersje openSSL 1.1.x, ale nadal preferuje wersje openSSL 1.0.x.

Opis zmiany

Wcześniej środowisko uruchomieniowe platformy .NET Core używało wersji OpenSSL 1.0.x w systemie macOS dla typów korzystających z biblioteki OpenSSL. Najnowsza wersja openSSL 1.0.x, OpenSSL 1.0.2, jest obecnie niedostępna. Aby zachować typy używające biblioteki OpenSSL w obsługiwanych wersjach biblioteki OpenSSL, środowiska uruchomieniowe platformy .NET Core 3.0 i nowszych używają teraz nowszych wersji biblioteki OpenSSL w systemie macOS.

Dzięki tej zmianie zachowanie środowisk uruchomieniowych platformy .NET Core w systemie macOS jest następujące:

  • Środowiska uruchomieniowe platformy .NET Core 3.0 lub nowszej używają biblioteki OpenSSL 1.1.x, jeśli są dostępne, i wracają do biblioteki OpenSSL 1.0.x tylko wtedy, gdy nie ma dostępnej wersji 1.1.x.

    W przypadku osób wywołujących korzystających z typów międzyoperacyjności OpenSSL z niestandardowymi wywołaniami P/Invoke postępuj zgodnie ze wskazówkami w SafeEvpPKeyHandle.OpenSslVersion uwagach. Aplikacja może ulec awarii, jeśli nie sprawdzisz OpenSslVersion wartości.

  • Środowisko uruchomieniowe platformy .NET Core 2.1 używa biblioteki OpenSSL 1.0.x, jeśli jest dostępne, i wraca do biblioteki OpenSSL 1.1.x, jeśli nie ma dostępnej wersji 1.0.x.

    Środowisko uruchomieniowe 2.1 preferuje starszą wersję biblioteki OpenSSL, ponieważ SafeEvpPKeyHandle.OpenSslVersion właściwość nie istnieje na platformie .NET Core 2.1, więc wersja openSSL nie może być niezawodnie określona w czasie wykonywania.

Wprowadzona wersja

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

Kategoria

Podstawowe biblioteki platformy .NET

Dotyczy interfejsów API


MSBuild

Narzędzia projektu są teraz dołączone do zestawu SDK

Zestaw .NET Core 2.1 SDK zawiera teraz typowe narzędzia interfejsu wiersza polecenia i nie trzeba już odwoływać się do tych narzędzi z projektu.

Opis zmiany

W programie .NET Core 2.0 projekty odwołują się do zewnętrznych narzędzi platformy .NET z ustawieniem <DotNetCliToolReference> projektu. W programie .NET Core 2.1 niektóre z tych narzędzi są dołączone do zestawu .NET Core SDK, a ustawienie nie jest już potrzebne. Jeśli dołączysz odwołania do tych narzędzi w projekcie, wystąpi błąd podobny do następującego: narzędzie "Microsoft.EntityFrameworkCore.Tools.DotNet" jest teraz dołączone do zestawu .NET Core SDK.

Narzędzia są teraz dostępne w zestawie SDK platformy .NET Core 2.1:

<Wartość DotNetCliToolReference> Narzędzie
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

Wprowadzona wersja

Zestaw .NET Core SDK 2.1.300

<DotNetCliToolReference> Usuń ustawienie z projektu.

Kategoria

MSBuild

Dotyczy interfejsów API

Nie dotyczy


Zobacz też