Megosztás a következőn keresztül:


Kompatibilitástörő változások a .NET Core 2.1-ben

Ha a .NET Core 2.1-es verziójára migrál, a cikkben felsorolt kompatibilitástörő változások hatással lehetnek az alkalmazásra.

Alapvető .NET-kódtárak

Az elérési út API-k nem adnak kivételt érvénytelen karakterek esetén

A fájlelérési utakat tartalmazó API-k már nem ellenőrzik az elérési út karaktereit, vagy ArgumentException érvénytelen karaktert eredményeznek.

Módosítás leírása

A .NET-keretrendszer és a .NET Core 1.0 – 2.0 rendszerben az Érintett API-k szakaszban felsorolt metódusok érvénytelen ArgumentException elérési utat tartalmaznak. A .NET Core 2.1-től kezdődően ezek a metódusok már nem ellenőrzik az érvénytelen elérésiút-karaktereket , és nem jeleznek kivételt, ha érvénytelen karaktert talál.

A változás oka

Az elérésiút-karakterek agresszív érvényesítése blokkol néhány platformfüggetlen forgatókönyvet. Ez a módosítás azért lett bevezetve, hogy a .NET ne próbálja meg replikálni vagy megjósolni az operációs rendszer API-hívásainak eredményét. További információ: a .NET Core 2.1 betekintő blogbejegyzésének System.IO.

Bevezetett verzió

.NET Core 2.1

Ha a kód ezekre az API-kra támaszkodott, hogy ellenőrizze az érvénytelen karaktereket, felvehet egy hívást a következőbe Path.GetInvalidPathChars: .

Érintett API-k

Lásd még


Beépített strukturált típusokhoz hozzáadott privát mezők

A referenciaszerelvények egyes struktúratípusaihoz magánmezők lettek hozzáadva. Ennek eredményeképpen a C#-ban ezeket a szerkezettípusokat mindig az új operátor vagy az alapértelmezett literál használatával kell példányosíteni.

Módosítás leírása

A .NET Core 2.0-s és korábbi verzióiban néhány megadott struktúratípus, például ConsoleKeyInfoaz operátor vagy az new alapértelmezett literál C# használata nélkül is példányosítható. Ennek az az oka, hogy a C#-fordító által használt referenciaszerelvények nem tartalmazzák a szerkezetek privát mezőit. A .NET-struktúratípusok összes magánmezője hozzá lesz adva a .NET Core 2.1-től kezdődő referenciaszerelvényekhez.

A következő C#-kód például a .NET Core 2.0-ban áll össze, a .NET Core 2.1-ben azonban nem:

ConsoleKeyInfo key;    // Struct type

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

A .NET Core 2.1-ben az előző kód a következő fordítóhibát eredményezi: CS0165 – Nem hozzárendelt helyi változó (kulcs) használata

Bevezetett verzió

2.1

A szerkezettípusok példányosítása az operátor vagy az new alapértelmezett literál használatával.

Példa:

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

Kategória

Alapvető .NET-kódtárak

Érintett API-k


OpenSSL-verziók macOS rendszeren

A macOS .NET Core 3.0-s és újabb futtatókörnyezetei mostantól az OpenSSL 1.1.x verziót részesítik előnyben az AesCcmOpenSSL 1.0.x verziókhoz a , AesGcm, DSAOpenSsl, ECDiffieHellmanOpenSsl, ECDsaOpenSsl, RSAOpenSslés SafeEvpPKeyHandle típusok esetében.

A .NET Core 2.1 futtatókörnyezet mostantól támogatja az OpenSSL 1.1.x verziókat, de továbbra is az OpenSSL 1.0.x verziót részesíti előnyben.

Módosítás leírása

A .NET Core-futtatókörnyezet korábban openSSL 1.0.x verziót használt macOS rendszeren az OpenSSL-t használó típusokhoz. Az OpenSSL 1.0.x legújabb verziója, az OpenSSL 1.0.2 már nem támogatott. Az OpenSSL-t az OpenSSL támogatott verzióiban használó típusok megtartása érdekében a .NET Core 3.0-s és újabb futtatókörnyezetei mostantól az OpenSSL újabb verzióit használják macOS rendszeren.

Ezzel a módosítással a .NET Core-futtatókörnyezetek viselkedése macOS rendszeren a következő:

  • A .NET Core 3.0-s és újabb verziói az OpenSSL 1.1.x verziót használják, ha elérhetőek, és csak akkor térjenek vissza az OpenSSL 1.0.x verzióra, ha nem érhető el 1.1.x verzió.

    Az OpenSSL interoptípusokat egyéni P/Invokes használatával használó hívók esetében kövesse a SafeEvpPKeyHandle.OpenSslVersion megjegyzésekben található útmutatást. Az alkalmazás összeomlhat, ha nem ellenőrzi az OpenSslVersion értéket.

  • A .NET Core 2.1 futtatókörnyezet az OpenSSL 1.0.x verziót használja, ha elérhető, és az OpenSSL 1.1.x verzióra esik vissza, ha nem érhető el 1.0.x verzió.

    A 2.1-es futtatókörnyezet az OpenSSL korábbi verzióját részesíti előnyben, mivel a SafeEvpPKeyHandle.OpenSslVersion tulajdonság nem létezik a .NET Core 2.1-ben, ezért az OpenSSL-verzió futásidőben nem határozható meg megbízhatóan.

Bevezetett verzió

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

Kategória

Alapvető .NET-kódtárak

Érintett API-k


Msbuild

Az SDK-ban már megtalálható projekteszközök

A .NET Core 2.1 SDK már magában foglalja a parancssori felület általános eszközkészletét, és már nem kell a projektből hivatkoznia ezekre az eszközökre.

Módosítás leírása

A .NET Core 2.0-ban a projektek külső .NET-eszközökre hivatkoznak a <DotNetCliToolReference> projektbeállítással. A .NET Core 2.1-ben ezen eszközök némelyike megtalálható a .NET Core SDK-ban, és a beállításra már nincs szükség. Ha ezekre az eszközökre hivatkozik a projektben, a következőhöz hasonló hibaüzenet jelenik meg: A .NET Core SDK tartalmazza a "Microsoft.EntityFrameworkCore.Tools.DotNet" eszközt.

A .NET Core 2.1 SDK-ban mostantól elérhető eszközök:

<DotNetCliToolReference> érték Eszköz
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

Bevezetett verzió

.NET Core SDK 2.1.300

Távolítsa el a beállítást a <DotNetCliToolReference> projektből.

Kategória

Msbuild

Érintett API-k

n/a


Lásd még