Školení
Modul
Zabezpečení null v jazyce C# - Training
Naučte se kódovat postupy, které pomáhají zabránit výskytu NullReferenceException.
Tento prohlížeč se už nepodporuje.
Upgradujte na Microsoft Edge, abyste mohli využívat nejnovější funkce, aktualizace zabezpečení a technickou podporu.
Pokud migrujete na verzi 2.1 .NET Core, můžou zásadní změny uvedené v tomto článku ovlivnit vaši aplikaci.
Rozhraní API, která zahrnují cesty k souborům, již neověřují znaky cesty nebo vyvolává výjimku, ArgumentException pokud byl nalezen neplatný znak.
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.
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 .
.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.
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.
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:
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
2.1
Vytvoření instance typů struktury pomocí operátoru nebo výchozího literálu new
Příklad:
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!");
Knihovny Core .NET
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.
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.
Odinstalujte OpenSSL verze 1.0.2, pokud už ho nepotřebujete.
Nainstalujte OpenSSL 1.1.x, pokud používáte AesCcm, AesGcm, DSAOpenSsl, ECDiffieHellmanOpenSsl, ECDsaOpenSsl, RSAOpenSslnebo SafeEvpPKeyHandle typy.
Pokud používáte typy interoperability OpenSSL s vlastními voláními nespravovaného kódu, postupujte podle pokynů v SafeEvpPKeyHandle.OpenSslVersion poznámkách.
Knihovny Core .NET
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.
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 |
.NET Core SDK 2.1.300
<DotNetCliToolReference>
Odeberte nastavení z projektu.
MSBuild
–
Zpětná vazba k produktu .NET
.NET je open source projekt. Vyberte odkaz pro poskytnutí zpětné vazby:
Školení
Modul
Zabezpečení null v jazyce C# - Training
Naučte se kódovat postupy, které pomáhají zabránit výskytu NullReferenceException.