Číst v angličtině

Sdílet prostřednictvím


Zásadní změny v .NET Core 2.1

Pokud migrujete na verzi 2.1 .NET Core, můžou zásadní změny uvedené v tomto článku ovlivnit vaši aplikaci.

Knihovny Core .NET

Rozhraní API cest nevyvolají výjimku pro neplatné znaky.

Rozhraní API, která zahrnují cesty k souborům, již neověřují znaky cesty nebo vyvolává výjimku, ArgumentException pokud byl nalezen neplatný znak.

Změna popisu

V rozhraní .NET Framework a .NET Core 1.0 – 2.0 vyvolá metody uvedené v části ArgumentException Ovlivněná rozhraní API chybu, pokud argument cesty obsahuje neplatný znak cesty. Od verze .NET Core 2.1 už tyto metody nekontrolují neplatné znaky cesty nebo v případě nalezení neplatného znaku vyvolá výjimku.

Důvod změny

Agresivní ověřování znaků cesty blokuje některé scénáře pro různé platformy. Tato změna byla zavedena tak, aby se rozhraní .NET nepokoušelo replikovat ani předpovědět výsledek volání rozhraní API operačního systému. Další informace najdete v System.IO v blogovém příspěvku .NET Core 2.1 .

Zavedená verze

.NET Core 2.1

Pokud váš kód spoléhal na tato rozhraní API ke kontrole neplatných znaků, můžete přidat volání Path.GetInvalidPathChars.

Ovlivněná rozhraní API

Viz také


Soukromá pole přidaná do předdefinovaných typů struktur

Privátní pole byla přidána do určitých typů struktur v referenčních sestaveních. V jazyce C# proto musí být tyto typy struktur vždy vytvořena pomocí nového operátoru nebo výchozího literálu.

Změna popisu

V .NET Core 2.0 a předchozích verzích můžou být některé zadané typy ConsoleKeyInfostruktur například možné vytvořit instanci bez použití operátoru nebo výchozího new literálu v jazyce C#. Důvodem bylo to, že referenční sestavení používaná kompilátorem jazyka C# neobsahovala privátní pole pro struktury. Všechna privátní pole pro typy struktur .NET se přidají do referenčních sestavení začínajících v .NET Core 2.1.

Například následující kód C# se zkompiluje v .NET Core 2.0, ale ne v .NET Core 2.1:

C#
ConsoleKeyInfo key;    // Struct type

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

V .NET Core 2.1 má předchozí kód za následek následující chybu kompilátoru: CS0165 – Použití nepřiřazené místní proměnné key

Zavedená verze

2.1

Doporučená akce

Vytvoření instance typů struktury pomocí operátoru nebo výchozího literálu new

Příklad:

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

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

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

Kategorie

Knihovny Core .NET

Ovlivněná rozhraní API


Verze OpenSSL v macOS

Moduly runtime .NET Core 3.0 a novější v systému macOS teď dávají přednost verzím OpenSSL 1.1.x pro verze OpenSSL 1.0.x pro AesCcmverze , , ECDiffieHellmanOpenSslDSAOpenSslECDsaOpenSslAesGcmRSAOpenSsla SafeEvpPKeyHandle typy.

Modul runtime .NET Core 2.1 teď podporuje verze OpenSSL 1.1.x, ale stále preferuje verze OpenSSL 1.0.x.

Změna popisu

Modul runtime .NET Core dříve používal verze OpenSSL 1.0.x v systému macOS pro typy, které komunikují s OpenSSL. Nejnovější verze OpenSSL 1.0.x, OpenSSL 1.0.2, je teď mimo podporu. Pro zachování typů, které používají OpenSSL v podporovaných verzích OpenSSL, teď .NET Core 3.0 a novější moduly runtime používají novější verze OpenSSL v macOS.

Při této změně je chování modulů runtime .NET Core v systému macOS následující:

  • Moduly runtime .NET Core 3.0 a novější verze používají OpenSSL 1.1.x, pokud jsou k dispozici, a pokud jsou k dispozici, vraťte se k OpenSSL 1.0.x, pouze pokud není k dispozici žádná verze 1.1.x.

    Pro volající, kteří používají typy komunikace OpenSSL s vlastními voláními P/Invokes, postupujte podle pokynů v SafeEvpPKeyHandle.OpenSslVersion poznámkách. Pokud tuto hodnotu nekontrolujete, může dojít k chybovému OpenSslVersion ukončení aplikace.

  • Modul runtime .NET Core 2.1 používá OpenSSL 1.0.x, pokud je k dispozici, a vrátí se zpět na OpenSSL 1.1.x, pokud není k dispozici žádná verze 1.0.x.

    Modul runtime 2.1 dává přednost dřívější verzi OpenSSL, protože SafeEvpPKeyHandle.OpenSslVersion vlastnost v .NET Core 2.1 neexistuje, takže verzi OpenSSL nelze spolehlivě určit za běhu.

Zavedená verze

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

Doporučená akce

Kategorie

Knihovny Core .NET

Ovlivněná rozhraní API


MSBuild

Project tools now included in SDK

Sada .NET Core 2.1 SDK teď obsahuje běžné nástroje rozhraní příkazového řádku a už na tyto nástroje z projektu nemusíte odkazovat.

Změna popisu

V .NET Core 2.0 projekty odkazují na externí nástroje .NET s <DotNetCliToolReference> nastavením projektu. V .NET Core 2.1 jsou některé z těchto nástrojů součástí sady .NET Core SDK a nastavení už není potřeba. Pokud do projektu zahrnete odkazy na tyto nástroje, zobrazí se vám podobná chyba: Nástroj Microsoft.EntityFrameworkCore.Tools.DotNet je teď součástí sady .NET Core SDK.

Nástroje, které jsou teď součástí sady .NET Core 2.1 SDK:

<DotNetCliToolReference> – hodnota Nástroj
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

Zavedená verze

.NET Core SDK 2.1.300

Doporučená akce

<DotNetCliToolReference> Odeberte nastavení z projektu.

Kategorie

MSBuild

Ovlivněná rozhraní API


Viz také