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


Alapvető .NET-kódtárak – kompatibilitástörő változások a .NET Core 1.0-3.0-ban

Az alapvető .NET-kódtárak biztosítják a .NET Core által használt primitíveket és egyéb általános típusokat.

A következő kompatibilitástörő változások dokumentálva vannak ezen a lapon:

Kompatibilitástörő változás Bevezetett verzió
A GroupCollection továbbítása az IEnumerable<T> kiterjesztési metódusaihoz egyértelműsítést igényel .NET Core 3.0
Azok az API-k, amelyek a jelentésverziót jelentik, és nem a fájlverziót jelentik .NET Core 3.0
Az egyéni EncoderFallbackBuffer-példányok nem eshetnek vissza rekurzívan .NET Core 3.0
Lebegőpontos formázási és elemzési viselkedésváltozások .NET Core 3.0
A lebegőpontos elemzési műveletek már nem hiúsulnak meg, vagy túlcsordulást jeleznek .NET Core 3.0
InvalidAsynchronousStateException áthelyezve egy másik szerelvénybe .NET Core 3.0
A rosszul formázott UTF-8 bájtsorozatok cseréje Unicode-irányelveket követ .NET Core 3.0
TypeDescriptionProviderAttribute áthelyezve egy másik szerelvénybe .NET Core 3.0
A ZipArchiveEntry már nem kezeli az inkonzisztens bejegyzésméretű archívumokat .NET Core 3.0
A FieldInfo.SetValue kivételt jelez a statikus, csak init-only mezők esetében .NET Core 3.0
Az elérési út API-k nem adnak kivételt érvénytelen karakterek esetén .NET Core 2.1
Beépített strukturált típusokhoz hozzáadott privát mezők .NET Core 2.1
A UseShellExecute alapértelmezett értékének módosítása .NET Core 2.1
OpenSSL-verziók macOS rendszeren .NET Core 2.1
A FileSystemInfo.Attributes által elvetett UnauthorizedAccessException .NET Core 1.0
A sérült folyamatállapot-kivételek kezelése nem támogatott .NET Core 1.0
Az UriBuilder tulajdonságai már nem vannak előre felfűzve a bevezető karakterekre .NET Core 1.0
A Process.StartInfo érvénytelenOperationException parancsot ad a nem indult folyamatokhoz .NET Core 1.0

.NET Core 3.0

A GroupCollection továbbítása az IEnumerable<T> kiterjesztési metódusaihoz egyértelműsítést igényel

Ha olyan bővítménymetódust hív meg, amely egy adott bővítményt GroupCollectionhasználIEnumerable<T>, a típust egy öntöttel kell egyértelműsítenie.

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

A .NET Core 3.0-tól System.Text.RegularExpressions.GroupCollection kezdve az általa implementálható egyéb típusok mellett implementál IEnumerable<KeyValuePair<String,Group>> is, beleértve a IEnumerable<Group>. Ez kétértelműséget eredményez egy olyan bővítménymetódus meghívásakor, amely egy IEnumerable<T>. Ha például egy példányon GroupCollection meghív egy ilyen bővítménymetódust, Enumerable.Counta következő fordítóhiba jelenik meg:

CS1061: A "GroupCollection" nem tartalmaz definíciót a "Count" kifejezéshez, és nem található akadálymentes "Count" kiterjesztési módszer, amely elfogadja a "GroupCollection" típusú első argumentumot (hiányzik egy használt irányelv vagy egy szerelvényhivatkozás?)

A .NET korábbi verzióiban nem volt kétértelműség és fordítási hiba.

Bevezetett verzió

3,0

A változás oka

Ez nem szándékos törés volt. Mivel már egy ideje így van, nem tervezzük visszaállítani. Emellett egy ilyen változás maga is törés lenne.

Például GroupCollection egyértelműsítse azokat a bővítménymeta-metódusokat, amelyek egy leadott elemet fogadnak IEnumerable<T> el.

// Without a cast - causes CS1061.
match.Groups.Count(_ => true)

// With a disambiguating cast.
((IEnumerable<Group>)m.Groups).Count(_ => true);

Kategória

Alapvető .NET-kódtárak

Érintett API-k

Minden olyan bővítménymetódus, amely elfogad egy bővítményt IEnumerable<T> , hatással van rá. Példa:


Azok az API-k, amelyek a jelentésverziót jelentik, és nem a fájlverziót jelentik

A .NET Core-ban verziót vissza adó API-k közül sok most a termékverziót adja vissza a fájlverzió helyett.

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

A .NET Core 2.2-es és korábbi verzióiban Environment.VersionRuntimeInformation.FrameworkDescriptiona .NET Core-szerelvények fájltulajdonságainak párbeszédpanelje a fájlverziót tükrözi. A .NET Core 3.0-tól kezdve a termékverziót tükrözik.

Az alábbi ábra a .NET Core 2.2 (bal oldalon) és a .NET Core 3.0 (jobb oldalon) System.Runtime.dll szerelvény verzióadatainak különbségét mutatja be a Windows Intéző fájltulajdonságok párbeszédpanelén látható módon.

Difference in product version information

Bevezetett verzió

3,0

Nincs. Ennek a módosításnak intuitívabbá kell tennie a verzióészlelést, és nem kell eltűrnie.

Kategória

Alapvető .NET-kódtárak

Érintett API-k


Az egyéni EncoderFallbackBuffer-példányok nem eshetnek vissza rekurzívan

Az egyéni EncoderFallbackBuffer példányok nem eshetnek vissza rekurzív módon. A megvalósításnak EncoderFallbackBuffer.GetNextChar() olyan karaktersorozatot kell eredményeznie, amely a célkódolásra konvertálható. Ellenkező esetben kivétel történik.

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

A karakterről bájtra transzkódolási művelet során a futtatókörnyezet észleli a hibásan formázott vagy nem konvertálható UTF-16 sorozatokat, és megadja ezeket a karaktereket a EncoderFallbackBuffer.Fallback metódusnak. A Fallback metódus meghatározza, hogy mely karaktereket kell helyettesíteni az eredeti nem konverbilis adatokkal, és ezeket a karaktereket egy ciklus meghívásával EncoderFallbackBuffer.GetNextChar üríti ki a rendszer.

A futtatókörnyezet ezután megpróbálja átkódolni ezeket a helyettesítő karaktereket a célkódolásra. Ha ez a művelet sikeres, a futtatókörnyezet továbbra is átkódolást hajt végre onnan, ahol az eredeti bemeneti sztringben abbahagyta.

Korábban az egyéni implementációk EncoderFallbackBuffer.GetNextChar() olyan karaktersorozatokat adhatnak vissza, amelyek nem konvertálhatók a célkódolásra. Ha a helyettesítő karakterek nem kódolhatók át a célkódolásra, a futtatókörnyezet ismét meghívja a EncoderFallbackBuffer.Fallback metódust a helyettesítő karakterekkel, és azt várja, hogy a EncoderFallbackBuffer.GetNextChar() metódus egy új helyettesítési sorozatot ad vissza. Ez a folyamat addig folytatódik, amíg a futtatókörnyezet végül egy jól formázott, átalakítható helyettesítést nem lát, vagy amíg el nem éri a maximális rekurziós számot.

A .NET Core 3.0-tól kezdve az egyéni implementációknak EncoderFallbackBuffer.GetNextChar() vissza kell adniuk a célkódolásra konvertálható karaktersorozatokat. Ha a helyettesítő karakterek nem kódolhatók át a célkódolásra, a rendszer egy ArgumentException karaktert ad vissza. A futtatókörnyezet többé nem indít rekurzív hívásokat a EncoderFallbackBuffer példányba.

Ez a viselkedés csak akkor érvényes, ha a következő három feltétel teljesül:

  • A futtatókörnyezet egy rosszul formázott UTF-16 sorozatot vagy egy UTF-16 sorozatot észlel, amely nem konvertálható a célkódolásra.
  • EncoderFallback Egyéni beállítás van megadva.
  • Az egyéni EncoderFallback kísérletek egy új rosszul formázott vagy nem konvertálható UTF-16 sorozat helyettesítésére.

Bevezetett verzió

3,0

A legtöbb fejlesztőnek nem kell semmilyen műveletet elvégeznie.

Ha egy alkalmazás egyéni EncoderFallback és EncoderFallbackBuffer osztályt használ, győződjön meg arról, hogy a tartalék puffert EncoderFallbackBuffer.Fallback jól formázott UTF-16-adatokkal tölti fel, amelyek közvetlenül konvertálhatók a célkódolásra, amikor a futtatókörnyezet először meghívja a Fallback metódust.

Kategória

Alapvető .NET-kódtárak

Érintett API-k


Módosult a lebegőpontos formázás és elemzési viselkedés

A lebegőpontos elemzési és formázási viselkedés (a típusok és Single a Double típusok szerint) most már Enterprise kiadás E-kompatibilis. Ez biztosítja, hogy a lebegőpontos típusok viselkedése a .NET-ben megegyezik a többi I Enterprise kiadás E-kompatibilis nyelv viselkedésével. Például mindig meg kell egyeznie azzal, double.Parse("SomeLiteral") amit a C# állít elő.double x = SomeLiteral

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

A .NET Core 2.2-ben és a korábbi verziókban a formázás Double.ToString és Single.ToStringaz elemzés a következővelDouble.Parse: , Double.TryParse, Single.Parseés Single.TryParse nem I Enterprise kiadás E-kompatibilis. Ennek eredményeképpen lehetetlen garantálni, hogy egy érték lekerekítve legyen bármilyen támogatott szabványos vagy egyéni formátumsztringgel. Egyes bemenetek esetében a formázott érték elemzésének kísérlete sikertelen lehet, mások esetében pedig az elemzési érték nem egyenlő az eredeti értékkel.

A .NET Core 3.0-tól kezdve a lebegőpontos elemzési és formázási műveletek I Enterprise kiadás E 754-kompatibilisek.

Az alábbi táblázat két kódrészletet és a .NET Core 2.2 és a .NET Core 3.1 közötti kimenet változását mutatja be.

Kódrészletet Kimenet a .NET Core 2.2-n Kimenet a .NET Core 3.1-en
Console.WriteLine((-0.0).ToString()); 0 0-
var value = -3.123456789123456789;
Console.WriteLine(value == double.Parse(value.ToString()));
False True

További információkért tekintse meg a lebegőpontos elemzési és formázási fejlesztéseket a .NET Core 3.0 blogbejegyzésében.

Bevezetett verzió

3,0

A lebegőpontos elemzési és formázási fejlesztések meglévő kódszakaszáragyakorolt lehetséges hatás a .NET Core 3.0 blogbejegyzésben arra utal, hogy a kódon elvégezhet néhány módosítást, ha meg szeretné tartani az előző viselkedést.

  • A formázás egyes eltérései esetén egy másik formátumsztring megadásával az előző viselkedésnek megfelelő viselkedést kaphat.
  • Az elemzési különbségek esetén nincs olyan mechanizmus, amely visszaeshet az előző viselkedésre.

Kategória

Alapvető .NET-kódtárak

Érintett API-k


A lebegőpontos elemzési műveletek már nem hiúsulnak meg, vagy túlcsordulást jeleznek

A lebegőpontos elemzési metódusok már nem adnak vissza vagy nem adnak OverflowException vissza false értéket, ha olyan sztringet elemeznek, amelynek numerikus értéke kívül esik a lebegőpontos vagy Double a Single lebegőpontos típus tartományán.

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

A .NET Core 2.2-es és korábbi verzióiban a Double.Parse metódusok olyan Single.Parse értékeket adnak OverflowException meg, amelyek nem tartoznak a megfelelő típus tartományába. A Double.TryParse tartományon kívüli numerikus értékek sztringreprezentációinak és Single.TryParse metódusainak visszaadása false .

A .NET Core 3.0-tól kezdve a Double.Parse, Double.TryParse, Single.Parseés Single.TryParse metódusok már nem hiúsulnak meg a tartományon kívüli numerikus sztringek elemzésekor. Ehelyett az elemzési metódusok a Double túllépett Double.MaxValueértékeknél térnek visszaDouble.PositiveInfinity, és a kisebb Double.MinValueértékeknél térnek visszaDouble.NegativeInfinity. Hasonlóképpen, az elemzési metódusok a Single nagyobb Single.MaxValueértékeket is visszaadjákSingle.PositiveInfinity, és a kisebb Single.MinValueértékeket adnak visszaSingle.NegativeInfinity.

Ez a módosítás a jobb I Enterprise kiadás E 754:2008 megfelelőség érdekében történt.

Bevezetett verzió

3,0

Ez a módosítás kétféleképpen befolyásolhatja a kódot:

  • A kód a túlcsorduláskor végrehajtandó kezelőtől OverflowException függ. Ebben az esetben távolítsa el az utasítást, és helyezze el a catch szükséges kódot egy If utasításban, amely ellenőrzi, hogy van-e Double.IsInfinitytrue.Single.IsInfinity

  • A kód feltételezi, hogy a lebegőpontos értékek nem Infinity. Ebben az esetben hozzá kell adnia a szükséges kódot a lebegőpontos értékek PositiveInfinity és NegativeInfinitya .

Kategória

Alapvető .NET-kódtárak

Érintett API-k


InvalidAsynchronousStateException áthelyezve egy másik szerelvénybe

Az InvalidAsynchronousStateException osztály át lett helyezve.

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

A .NET Core 2.2-es és korábbi verzióiban az InvalidAsynchronousStateException osztály a System.ComponentModel.TypeConverter szerelvényben található.

A .NET Core 3.0-tól kezdve a System.ComponentModel.Primitives szerelvényben található.

Bevezetett verzió

3,0

Ez a változás csak azokat az alkalmazásokat érinti, amelyek tükrözést használnak a InvalidAsynchronousStateException terheléshez egy olyan metódus meghívásávalActivator.CreateInstance, mint például Assembly.GetType egy olyan túlterhelés, amely feltételezi, hogy a típus egy adott szerelvényben található. Ha ez a helyzet, frissítse a metódushívásban hivatkozott szerelvényt, hogy tükrözze a típus új szerelvényhelyét.

Kategória

Alapvető .NET-kódtárak

Érintett API-k

Nincs.


A rosszul formázott UTF-8 bájtsorozatok cseréje Unicode-irányelveket követ

Ha az UTF8Encoding osztály hibás UTF-8 bájtsorozattal találkozik egy bájtról karakterre történő átkódolási művelet során, akkor ezt a sorozatot a kimeneti sztringben egy ' ' (U+FFFD REPLACE CHARACTER) karakterre cseréli. A .NET Core 3.0 eltér a .NET Core korábbi verzióitól és a .NET-keretrendszer a Unicode ajánlott eljárásának követésével, amely a helyettesítést a transzkódolási művelet során hajtja végre.

Ez egy nagyobb erőfeszítés része az UTF-8 kezelésének javítása a .NET-ben, beleértve az új System.Text.Unicode.Utf8 és System.Text.Rune a típusok által is. A UTF8Encoding típus továbbfejlesztett hibakezelési mechanikát kapott, hogy az az újonnan bevezetett típusokkal összhangban hozza létre a kimenetet.

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

A .NET Core 3.0-tól kezdve a bájtok karakterekre való átkódolásakor az osztály a UTF8Encoding Unicode ajánlott eljárásai alapján végez karakterhelyettesítést. A használt helyettesítési mechanizmust a Unicode Standard 12.0-s, 3.9-es (PDF) verziója ismerteti a maximális alrészek U+FFFD helyettesítése című címsorban.

Ez a viselkedés csak akkor érvényes, ha a bemeneti bájtsor hibásan formázott UTF-8 adatokat tartalmaz. Továbbá, ha a UTF8Encoding példányt létrehozták throwOnInvalidBytes: true, a UTF8Encoding példány továbbra is érvénytelen bemenetet ad vissza ahelyett, hogy U+FFFD-cserét végez. A konstruktorról további információt a UTF8EncodingUTF8Encoding(Boolean, Boolean).

Az alábbi táblázat egy érvénytelen 3 bájtos bemenettel szemlélteti a változás hatását:

Rosszul formázott 3 bájtos bemenet Kimenet a .NET Core 3.0 előtt Kimenet a .NET Core 3.0-val kezdődően
[ ED A0 90 ] [ FFFD FFFD ] (2 karakteres kimenet) [ FFFD FFFD FFFD ] (3 karakteres kimenet)

A 3 karakteres kimenet az előnyben részesített kimenet a korábban csatolt Unicode Standard PDF 3–9. táblázata szerint.

Bevezetett verzió

3,0

Nincs szükség műveletre a fejlesztő részéről.

Kategória

Alapvető .NET-kódtárak

Érintett API-k


TypeDescriptionProviderAttribute áthelyezve egy másik szerelvénybe

Az TypeDescriptionProviderAttribute osztály át lett helyezve.

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

A .NET Core 2.2-es és korábbi verzióiban az TypeDescriptionProviderAttribute osztály a System.ComponentModel.TypeConverter szerelvényben található.

A .NET Core 3.0-tól kezdve a System.ObjectModel szerelvényben található.

Bevezetett verzió

3,0

Ez a változás csak azokat az alkalmazásokat érinti, amelyek tükröződéssel töltik be a TypeDescriptionProviderAttribute típust egy olyan metódus meghívásával, mint például Assembly.GetType egy olyan túlterhelés Activator.CreateInstance , amely feltételezi, hogy a típus egy adott szerelvényben található. Ebben az esetben a metódushívásban hivatkozott szerelvényt frissíteni kell, hogy tükrözze a típus új szerelvényhelyét.

Kategória

Windows Forms

Érintett API-k

Nincs.


A ZipArchiveEntry már nem kezeli az inkonzisztens bejegyzésméretű archívumokat

A zip-archívumok a tömörített és a tömörítetlen méretet is felsorolják a központi könyvtárban és a helyi fejlécben. Maga a belépési adatok is jelzik a méretét. A .NET Core 2.2-ben és a korábbi verziókban ezek az értékek soha nem lettek ellenőrizve a konzisztencia szempontjából. A .NET Core 3.0-tól kezdve ezek most már elérhetők.

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

A .NET Core 2.2-ben és a korábbi verziókban akkor is sikeres, ZipArchiveEntry.Open() ha a helyi fejléc nem ért egyet a zip-fájl központi fejlécével. Az adatok a tömörített stream végéig lesznek tömörítve, még akkor is, ha a fájl hossza meghaladja a központi könyvtárban/helyi fejlécben felsorolt tömörítetlen fájlméretet.

A .NET Core 3.0-tól kezdve a metódus ellenőrzi, hogy a ZipArchiveEntry.Open() helyi fejléc és a központi fejléc megegyezik-e egy bejegyzés tömörített és tömörítetlen méretével. Ha nem, a metódus egy InvalidDataException olyan, ha az archívum helyi fejléc- és/vagy adatleíró listamérete nem egyezik meg a zip-fájl központi könyvtárával. Bejegyzés olvasásakor a rendszer csonkolja a tömörített adatokat a fejlécben felsorolt tömörítetlen fájlméretre.

Ez a módosítás annak biztosítása érdekében történt, hogy a ZipArchiveEntry rendszer helyesen adja meg az adatok méretét, és hogy csak az adatmennyiség legyen olvasható.

Bevezetett verzió

3,0

Csomagolja újra a zip archívumot, amely ezeket a problémákat mutatja.

Kategória

Alapvető .NET-kódtárak

Érintett API-k


A FieldInfo.SetValue kivételt jelez a statikus, csak init-only mezők esetében

A .NET Core 3.0-tól kezdve kivétel történik, ha egy statikus mező InitOnly értékét hívással System.Reflection.FieldInfo.SetValuepróbálja beállítani.

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

A .NET Core 3.0 előtti .NET-keretrendszer és verzióiban beállíthatja egy állandó statikus mező értékét az inicializálás után (olvashatóan C#-ban) hívássalSystem.Reflection.FieldInfo.SetValue. Az ilyen mezők ilyen módon történő beállítása azonban kiszámíthatatlan viselkedést eredményezett a cél-keretrendszer és az optimalizálási beállítások alapján.

A .NET Core 3.0-s és újabb verzióiban, amikor statikus mezőre InitOnly hív felSetValue, a rendszer kivételt System.FieldAccessException jelez.

Tipp.

A InitOnly mező olyan mező, amelyet csak a deklaráláskor vagy az azt tartalmazó osztály konstruktorában lehet beállítani. Más szóval az inicializálás után állandó.

Bevezetett verzió

3,0

Statikus inicializálás, InitOnly statikus konstruktor mezői. Ez a dinamikus és a nem dinamikus típusokra is vonatkozik.

Másik lehetőségként eltávolíthatja az attribútumot a FieldAttributes.InitOnly mezőből, majd meghívhatja FieldInfo.SetValue.

Kategória

Alapvető .NET-kódtárak

Érintett API-k


.NET Core 2.1

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


A UseShellExecute alapértelmezett értékének módosítása

ProcessStartInfo.UseShellExecute alapértelmezett értéke false a .NET Core. A .NET-keretrendszer alapértelmezett értéke .true

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

Process.Start lehetővé teszi egy alkalmazás közvetlen elindítását, például olyan kóddal, amely Process.Start("mspaint.exe") elindítja a Paintet. Azt is lehetővé teszi, hogy közvetetten elindítson egy társított alkalmazást, ha ProcessStartInfo.UseShellExecute be van állítva true. A .NET-keretrendszer alapértelmezett értéke ProcessStartInfo.UseShellExecutetruea következő, ami azt jelenti, hogy a kód, például Process.Start("mytextfile.txt") Jegyzettömb indulna el, ha .txt fájlokat társított a szerkesztőhöz. Ha meg szeretné akadályozni, hogy az alkalmazás indirekt módon elinduljon .NET-keretrendszer, explicit módon be kell állítania ProcessStartInfo.UseShellExecute a következőtfalse: . A .NET Core-on az alapértelmezett érték ProcessStartInfo.UseShellExecute a következő false: . Ez azt jelenti, hogy a társított alkalmazások alapértelmezés szerint nem indulnak el híváskor Process.Start.

A következő tulajdonságok System.Diagnostics.ProcessStartInfo csak akkor működnek, haProcessStartInfo.UseShellExecute:true

Ezt a módosítást teljesítménybeli okokból vezettük be a .NET Core-ban. Process.Start Általában egy alkalmazás közvetlen indítására szolgál. Az alkalmazások közvetlen indításának nem kell bevonnia a Windows rendszerhéjat, és a kapcsolódó teljesítményköltségeket kell magában foglalnia. Az alapértelmezett eset gyorsabbá tétele érdekében a .NET Core az alapértelmezett értéket a következőre falsemódosítjaProcessStartInfo.UseShellExecute: . Ha szüksége van rá, a lassabb útvonalat is választhatja.

Bevezetett verzió

2.1

Feljegyzés

A .NET Core UseShellExecute korábbi verzióiban nem lett implementálva a Windows.

Ha az alkalmazás a régi viselkedésre támaszkodik, hívja Process.Start(ProcessStartInfo)UseShellExecute meg az ProcessStartInfo objektumottrue.

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


.NET Core 1.0

A FileSystemInfo.Attributes által elvetett UnauthorizedAccessException

A .NET Core-ban a rendszer akkor aktiválódik UnauthorizedAccessException , amikor a hívó megpróbál beállítani egy fájlattribútum-értéket, de nem rendelkezik írási engedéllyel.

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

A .NET-keretrendszer a hívó megpróbálja beállítani a fájlattribútum-értéketFileSystemInfo.Attributes, ArgumentException de nem rendelkezik írási engedéllyel. A .NET Core-ban ehelyett egy UnauthorizedAccessException lesz a dobás. (A .NET Core-ban a rendszer akkor is eldob egy ArgumentException hibát, ha a hívó érvénytelen fájlattribútumot próbál beállítani.)

Bevezetett verzió

1,0

Módosítsa az utasításokat catch úgy, hogy szükség esetén egy helyett vagy azon kívül is elfogjanak UnauthorizedAccessException egy utasítást ArgumentException.

Kategória

Alapvető .NET-kódtárak

Érintett API-k


A sérült állapot kivételek kezelése nem támogatott

A sérült folyamatállapot-kivételek kezelése a .NET Core-ban nem támogatott.

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

Korábban a sérült folyamatállapot-kivételeket a felügyelt kódkivétel-kezelők is elkaphatták és kezelhetik, például egy C#-ban található try-catch utasítással.

A .NET Core 1.0-tól kezdődően a sérült folyamatállapot-kivételek nem kezelhetők felügyelt kóddal. A közös nyelvi futtatókörnyezet nem biztosít sérült folyamatállapot-kivételeket a felügyelt kódhoz.

Bevezetett verzió

1,0

Ne kelljen kezelni a sérült folyamatállapot-kivételeket az őket eredményező helyzetek kezelésével. Ha feltétlenül szükséges a sérült folyamatállapot-kivételek kezelése, írja be a kivételkezelőt C vagy C++ kódba.

Kategória

Alapvető .NET-kódtárak

Érintett API-k


Az UriBuilder tulajdonságai már nem vannak előre felfűzve a bevezető karakterekre

UriBuilder.Fragment már nem fűzi elő a bevezető # karaktert, és UriBuilder.Query már nem fűzi elő a bevezető ? karaktert, ha már van ilyen.

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

A .NET-keretrendszer és a UriBuilder.FragmentUriBuilder.Query tulajdonságok mindig előre fel vannak függve egy # vagy ? több karakterre a tárolt értékre. Ez a viselkedés több # vagy ? karaktert eredményezhet a tárolt értékben, ha a sztring már tartalmaz ilyen kezdő karaktereket. Előfordulhat például, hogy az érték a UriBuilder.Fragment következő lesz ##main: .

A .NET Core 1.0-tól kezdődően ezek a # tulajdonságok már nem használják a tárolt értékre a karaktereket vagy ? karaktereket, ha a sztring elején már van ilyen.

Bevezetett verzió

1,0

A tulajdonságértékek beállításakor már nem kell explicit módon eltávolítania ezeket a bevezető karaktereket. Ez különösen akkor hasznos, ha értékeket fűz hozzá, mert többé nem kell eltávolítania a bevezetőt # vagy ? minden egyes hozzáfűzést.

Az alábbi kódrészlet például a .NET-keretrendszer és a .NET Core közötti viselkedésbeli különbséget mutatja.

var builder = new UriBuilder();
builder.Query = "one=1";
builder.Query += "&two=2";
builder.Query += "&three=3";
builder.Query += "&four=4";

Console.WriteLine(builder.Query);
  • A .NET-keretrendszer a kimenet a ????one=1&two=2&three=3&four=4következő: .
  • A .NET Core-ban a kimenet a következő ?one=1&two=2&three=3&four=4: .

Kategória

Alapvető .NET-kódtárak

Érintett API-k


A Process.StartInfo érvénytelenOperationException parancsot ad a nem indult folyamatokhoz

Azoknak a folyamatoknak a Process.StartInfo tulajdonságát olvasva, amelyeket a kód nem kezdett el dobni InvalidOperationException.

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

A .NET-keretrendszer a kód által nem indult folyamatok tulajdonságának elérése Process.StartInfo egy hamis ProcessStartInfo objektumot ad vissza. A próbabábu objektum az összes tulajdonságának alapértelmezett értékeit tartalmazza, kivéve EnvironmentVariablesa .

A .NET Core 1.0-tól kezdődően, ha egy olyan folyamat tulajdonságát olvassa el Process.StartInfo , amely nem indult el (vagyis hívással Process.Start), a rendszer egy InvalidOperationException hibát jelez.

Bevezetett verzió

1,0

Ne érje el a tulajdonságot azokhoz a Process.StartInfo folyamatokhoz, amelyeket a kód nem kezdett el. Például ne olvassa el ezt a tulajdonságot a visszaadott Process.GetProcessesfolyamatok esetében.

Kategória

Alapvető .NET-kódtárak

Érintett API-k