Aracılığıyla paylaş


.NET Core 1.0-3.0'da temel .NET kitaplıklarında hataya neden olan değişiklikler

Çekirdek .NET kitaplıkları .NET Core tarafından kullanılan temelleri ve diğer genel türleri sağlar.

Bu sayfada aşağıdaki hataya neden olan değişiklikler belgelenmiştir:

Hataya neden olan değişiklik Sürüm kullanıma sunulmuştur
IEnumerable<T> alan uzantı yöntemlerine GroupCollection geçirmek için kesinleştirme gerekir .NET Core 3.0
Rapor sürümüne sahip API'ler artık dosya sürümünü değil ürünü raporla .NET Core 3.0
Özel EncoderFallbackBuffer örnekleri özyinelemeli olarak geri dönemez .NET Core 3.0
Kayan nokta biçimlendirme ve ayrıştırma davranışı değişiklikleri .NET Core 3.0
Kayan nokta ayrıştırma işlemleri artık başarısız olmaz veya OverflowException oluşturamaz .NET Core 3.0
InvalidAsynchronousStateException başka bir derlemeye taşındı .NET Core 3.0
Bozuk biçimlendirilmiş UTF-8 bayt dizilerini değiştirmek Unicode yönergelerini izler .NET Core 3.0
TypeDescriptionProviderAttribute başka bir derlemeye taşındı .NET Core 3.0
ZipArchiveEntry artık tutarsız giriş boyutlarına sahip arşivleri işlemez .NET Core 3.0
FieldInfo.SetValue statik, yalnızca init alanları için özel durum oluşturuyor .NET Core 3.0
Yol API'leri geçersiz karakterler için özel durum oluşturmaz .NET Core 2.1
Yerleşik yapı türlerine eklenen özel alanlar .NET Core 2.1
UseShellExecute varsayılan değerinde değişiklik .NET Core 2.1
macOS'ta OpenSSL sürümleri .NET Core 2.1
FileSystemInfo.Attributes tarafından unauthorizedAccessException oluşturuldu .NET Core 1.0
Bozuk işlem durumu özel durumlarını işleme desteklenmiyor .NET Core 1.0
UriBuilder özellikleri artık baştaki karakterlerin başına eklenmez .NET Core 1.0
Process.StartInfo, başlatmadığınız işlemler için InvalidOperationException oluşturur .NET Core 1.0

.NET Core 3.0

IEnumerable<T> alan uzantı yöntemlerine GroupCollection geçirmek için kesinleştirme gerekir

üzerinde alan bir uzantı yöntemini IEnumerable<T>GroupCollectionçağırırken, türü tür ataması kullanarak kesinleştirmeniz gerekir.

Açıklama değiştirildi

.NET Core 3.0'dan başlayarak, System.Text.RegularExpressions.GroupCollectionIEnumerable<KeyValuePair<String,Group>> dahil olmak üzere IEnumerable<Group>uyguladığı diğer türlere ek olarak uygular. Bu, alan IEnumerable<T>bir uzantı yöntemini çağırırken belirsizliğe neden olur. Örneğin Enumerable.Countbir örnekte böyle bir uzantı yöntemini GroupCollection çağırırsanız aşağıdaki derleyici hatasını görürsünüz:

CS1061: 'GroupCollection' 'Count' için bir tanım içermiyor ve 'GroupCollection' türünün ilk bağımsız değişkenini kabul eden erişilebilir bir uzantı yöntemi 'Count' bulunamadı (using yönergesi veya derleme başvurusu eksik mi?)

.NET'in önceki sürümlerinde belirsizlik ve derleyici hatası yoktu.

Sürüm kullanıma sunulmuştur

3.0

Değişiklik nedeni

Bu kasıtsız bir hata değişikliğiydi. Bir süredir böyle olduğu için geri almayı planlamıyoruz. Buna ek olarak, böyle bir değişiklik kendi kendine bozulacak.

Örneğin GroupCollection , atama ile kabul IEnumerable<T> eden uzantı yöntemlerine yönelik disambiguate çağrıları.

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

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

Kategori

Core .NET kitaplıkları

Etkilenen API’ler

kabul eden herhangi bir IEnumerable<T> uzantı yöntemi etkilenir. Örneğin:


Rapor sürümüne sahip API'ler artık dosya sürümünü değil ürünü raporla

.NET Core'da sürüm döndüren API'lerin çoğu artık dosya sürümü yerine ürün sürümünü döndürür.

Açıklama değiştirildi

.NET Core 2.2 ve önceki sürümlerde , RuntimeInformation.FrameworkDescriptiongibi Environment.Versionyöntemler ve .NET Core derlemeleri için dosya özellikleri iletişim kutusu dosya sürümünü yansıtır. .NET Core 3.0'dan başlayarak ürün sürümünü yansıtır.

Aşağıdaki şekilde, Windows Gezgini dosya özellikleri iletişim kutusunda gösterildiği gibi .NET Core 2.2 (solda) ve .NET Core 3.0 (sağda) için System.Runtime.dll derlemesinin sürüm bilgileri arasındaki fark gösterilmektedir.

Difference in product version information

Sürüm kullanıma sunulmuştur

3.0

Yok. Bu değişiklik, sürüm algılamayı obtuse yerine sezgisel hale getirmelidir.

Kategori

Core .NET kitaplıkları

Etkilenen API’ler


Özel EncoderFallbackBuffer örnekleri özyinelemeli olarak geri dönemez

Özel EncoderFallbackBuffer örnekler özyinelemeli olarak geri döndürülemez. uygulaması EncoderFallbackBuffer.GetNextChar() , hedef kodlamaya dönüştürülebilir bir karakter dizisiyle sonuçlanmalıdır. Aksi takdirde bir özel durum oluşur.

Açıklama değiştirildi

Karakterden bayta dönüştürme işlemi sırasında çalışma zamanı hatalı biçimlendirilmiş veya çevrilemez UTF-16 dizilerini algılar ve bu karakterleri yöntemine EncoderFallbackBuffer.Fallback sağlar. Fallback yöntemi, özgün dönüştürülemez veriler için hangi karakterlerin değiştirileceğini belirler ve bu karakterler döngü içinde çağrılarak EncoderFallbackBuffer.GetNextChar boşaltılır.

Çalışma zamanı daha sonra bu değiştirme karakterlerini hedef kodlamaya dönüştürmeyi dener. Bu işlem başarılı olursa, çalışma zamanı özgün giriş dizesinde kaldığı yerden kodlamaya devam eder.

Daha önce, özel uygulamaları EncoderFallbackBuffer.GetNextChar() hedef kodlamaya dönüştürülemeyen karakter dizileri döndürebiliyor. Değiştirilen karakterler hedef kodlamaya kodlanamazsa, çalışma zamanı yöntemi değiştirme karakterleriyle bir kez daha çağırır EncoderFallbackBuffer.Fallback ve yöntemin yeni bir değiştirme dizisi döndürmesini EncoderFallbackBuffer.GetNextChar() bekler. Bu işlem, çalışma zamanı sonunda iyi biçimlendirilmiş, dönüştürülebilir bir değiştirme görene kadar veya maksimum özyineleme sayısına ulaşılana kadar devam eder.

.NET Core 3.0'dan başlayarak, özel uygulamaları EncoderFallbackBuffer.GetNextChar() hedef kodlamaya dönüştürülebilir karakter dizileri döndürmelidir. Değiştirilen karakterler hedef kodlamaya kodlanamazsa, bir ArgumentException oluşturulur. Çalışma zamanı artık örneğe özyinelemeli çağrılar EncoderFallbackBuffer yapmaz.

Bu davranış yalnızca aşağıdaki koşulların üçü de karşılandığında geçerlidir:

  • Çalışma zamanı, hedef kodlamaya dönüştürülemeyen, kötü biçimlendirilmiş bir UTF-16 dizisi veya UTF-16 dizisi algılar.
  • Özel EncoderFallback bir belirtildi.
  • Özel EncoderFallback girişimler, yeni bir hatalı biçimlendirilmiş veya dönüştürülemez UTF-16 dizisini değiştirme girişiminde bulunur.

Sürüm kullanıma sunulmuştur

3.0

Çoğu geliştiricinin herhangi bir işlem gerçekleştirmesi gerekmez.

Bir uygulama özel EncoderFallback ve EncoderFallbackBuffer sınıf kullanıyorsa, uygulamasının EncoderFallbackBuffer.Fallback geri dönüş arabelleğinin, yöntem çalışma zamanı tarafından ilk kez çağrıldığında Fallback hedef kodlamaya doğrudan dönüştürülebilen iyi biçimlendirilmiş UTF-16 verileriyle doldurulduğundan emin olun.

Kategori

Core .NET kitaplıkları

Etkilenen API’ler


Kayan nokta biçimlendirme ve ayrıştırma davranışı değiştirildi

Kayan nokta ayrıştırma ve biçimlendirme davranışı (ve türlerine Double göre) artık IEEE uyumlu.Single Bu, .NET'teki kayan nokta türlerinin davranışının diğer IEEE uyumlu dillerle eşleşmesini sağlar. Örneğin, double.Parse("SomeLiteral") C# tarafından için double x = SomeLiteralüretilen ile her zaman eşleşmelidir.

Açıklama değiştirildi

.NET Core 2.2 ve önceki sürümlerde ve ile Double.ToStringSingle.ToStringbiçimlendirme ve , Double.TryParse, Single.Parseve Single.TryParse ile Double.Parseayrıştırma, IEEE uyumlu değildir. Sonuç olarak, bir değerin desteklenen standart veya özel biçim dizeleriyle gidiş dönüş yapacağı garanti etmek mümkün değildir. Bazı girişlerde, biçimlendirilmiş bir değeri ayrıştırma girişimi başarısız olabilir ve diğerleri için ayrıştırılan değer özgün değere eşit değildir.

.NET Core 3.0'dan başlayarak, kayan nokta ayrıştırma ve biçimlendirme işlemleri IEEE 754 uyumlu olur.

Aşağıdaki tabloda iki kod parçacığı ve çıkışın .NET Core 2.2 ile .NET Core 3.1 arasında nasıl değiştiği gösterilmektedir.

Kod parçacığı .NET Core 2.2'de çıktı .NET Core 3.1'de çıkış
Console.WriteLine((-0.0).ToString()); 0 0-
var value = -3.123456789123456789;
Console.WriteLine(value == double.Parse(value.ToString()));
False True

Daha fazla bilgi için .NET Core 3.0'da Kayan nokta ayrıştırma ve biçimlendirme geliştirmeleri blog gönderisine bakın.

Sürüm kullanıma sunulmuştur

3.0

.NET Core 3.0 blog gönderisindeki Kayan nokta ayrıştırma ve biçimlendirme geliştirmelerinin Mevcut kod üzerindeki olası etkisi bölümünde, önceki davranışı korumak istiyorsanız kodunuzda yapabileceğiniz bazı değişiklikler önerilmektedir.

  • Biçimlendirmedeki bazı farklılıklar için, farklı bir biçim dizesi belirterek önceki davranışa eşdeğer bir davranış elde edebilirsiniz.
  • Ayrıştırma farklılıkları için önceki davranışa geri dönme mekanizması yoktur.

Kategori

Core .NET kitaplıkları

Etkilenen API’ler


Kayan nokta ayrıştırma işlemleri artık başarısız olmaz veya OverflowException oluşturamaz

Kayan nokta ayrıştırma yöntemleri, sayısal değeri veya kayan nokta türü aralığının Single dışında olan bir dizeyi ayrıştırdığında artık bir OverflowException veya Double döndürmezfalse.

Açıklama değiştirildi

.NET Core 2.2 ve önceki sürümlerinde ve Single.Parse yöntemleri, Double.Parse ilgili tür aralığının dışında olan değerler için bir OverflowException oluşturur. Double.TryParse ve Single.TryParse yöntemleri, aralık dışı sayısal değerlerin dize gösterimleri için döndürürfalse.

.NET Core 3.0'dan başlayarak, Double.Parsearalık dışı sayısal dizeler ayrıştırıldığında , Double.TryParse, Single.Parseve Single.TryParse yöntemleri artık başarısız olmaz. Bunun yerine, Double ayrıştırma yöntemleri değerini aşan Double.MaxValuedeğerler için döndürür Double.PositiveInfinity ve değerinden Double.MinValueküçük değerler için döndürürDouble.NegativeInfinity. Benzer şekilde, Single ayrıştırma yöntemleri değerini aşan Single.MaxValuedeğerler için döndürür Single.PositiveInfinity ve değerinden Single.MinValueküçük değerler için döndürürSingle.NegativeInfinity.

Bu değişiklik, geliştirilmiş IEEE 754:2008 uyumluluğu için yapılmıştır.

Sürüm kullanıma sunulmuştur

3.0

Bu değişiklik kodunuzu iki yoldan biriyle etkileyebilir:

  • Kodunuz, bir taşma oluştuğunda yürütülecek işleyiciye OverflowException bağlıdır. Bu durumda deyimini catch kaldırmanız ve olup olmadığını Double.IsInfinitySingle.IsInfinitytruetest eden bir If deyime gerekli kodları yerleştirmeniz gerekir.

  • Kodunuz kayan nokta değerlerinin olmadığını Infinityvarsayar. Bu durumda, ve NegativeInfinityöğesinin kayan nokta değerlerini PositiveInfinity denetlemek için gerekli kodu eklemeniz gerekir.

Kategori

Core .NET kitaplıkları

Etkilenen API’ler


InvalidAsynchronousStateException başka bir derlemeye taşındı

Sınıf InvalidAsynchronousStateException taşındı.

Açıklama değiştirildi

.NET Core 2.2 ve önceki sürümlerinde, InvalidAsynchronousStateException sınıfı System.ComponentModel.TypeConverter derlemesinde bulunur.

.NET Core 3.0'dan başlayarak System.ComponentModel.Primitives derlemesinde bulunur.

Sürüm kullanıma sunulmuştur

3.0

Bu değişiklik yalnızca türün belirli bir derlemede InvalidAsynchronousStateException olduğunu varsayar gibi bir yöntemi Assembly.GetType veya aşırı yüklemesini Activator.CreateInstance çağırarak öğesini yüklemek için yansıma kullanan uygulamaları etkiler. Böyle bir durumda, türün yeni derleme konumunu yansıtacak şekilde yöntem çağrısında başvuruda bulunılan derlemeyi güncelleştirin.

Kategori

Core .NET kitaplıkları

Etkilenen API’ler

Yok.


Bozuk biçimlendirilmiş UTF-8 bayt dizilerini değiştirmek Unicode yönergelerini izler

UTF8Encoding Sınıf, bayt-karakter dönüştürme işlemi sırasında hatalı biçimlendirilmiş bir UTF-8 bayt dizisiyle karşılaştığında, bu diziyi çıkış dizesinde '' (U+FFFD DEĞİşTİrME KARAKTERİ) karakteriyle değiştirir. .NET Core 3.0, kodlama değiştirme işlemi sırasında bu değişikliği gerçekleştirmek için en iyi Unicode uygulamasını izleyerek .NET Core ve .NET Framework'ün önceki sürümlerinden farklıdır.

Bu, yeni System.Text.Unicode.Utf8 ve System.Text.Rune türler dahil olmak üzere .NET genelinde UTF-8 işlemeyi geliştirmek için daha büyük bir çabanın parçasıdır. Türüne UTF8Encoding , yeni tanıtılan türlerle tutarlı bir çıkış üretmesi için geliştirilmiş hata işleme mekanizmaları verilmiştir.

Açıklama değiştirildi

.NET Core 3.0'dan başlayarak, baytları karakterlere dönüştürürken sınıf, UTF8Encoding Unicode en iyi yöntemlerine göre karakter değişimi gerçekleştirir. Kullanılan değiştirme mekanizması, Üst Düzey Alt Parçaların U+FFFD Değişimi başlıklı başlıkta Unicode Standard, Sürüm 12.0, Sn. 3.9 (PDF) ile açıklanmıştır.

Bu davranış yalnızca giriş bayt dizisi kötü biçimlendirilmiş UTF-8 verileri içerdiğinde geçerlidir. Ayrıca, örneği ile throwOnInvalidBytes: trueUTF8Encoding oluşturulduysaUTF8Encoding, örnek U+FFFD değişimi yerine geçersiz girişler yapmaya devam eder. Oluşturucu hakkında UTF8Encoding daha fazla bilgi için bkz UTF8Encoding(Boolean, Boolean). .

Aşağıdaki tabloda bu değişikliğin etkisi geçersiz bir 3 baytlık girişle gösterilmiştir:

Kötü biçimlendirilmiş 3 baytlık giriş .NET Core 3.0 öncesi çıkış .NET Core 3.0 ile başlayan çıkış
[ ED A0 90 ] [ FFFD FFFD ] (2 karakterlik çıkış) [ FFFD FFFD FFFD ] (3 karakterli çıkış)

3 karakterli çıkış, daha önce bağlantılı Unicode Standart PDF'nin Tablo 3-9'a göre tercih edilen çıkıştır.

Sürüm kullanıma sunulmuştur

3.0

Geliştirici tarafından herhangi bir işlem yapılması gerekmez.

Kategori

Core .NET kitaplıkları

Etkilenen API’ler


TypeDescriptionProviderAttribute başka bir derlemeye taşındı

Sınıf TypeDescriptionProviderAttribute taşındı.

Açıklama değiştirildi

.NET Core 2.2 ve önceki sürümlerinde, Sınıfı TypeDescriptionProviderAttribute System.ComponentModel.TypeConverter derlemesinde bulunur.

.NET Core 3.0'dan başlayarak System.ObjectModel derlemesinde bulunur.

Sürüm kullanıma sunulmuştur

3.0

Bu değişiklik yalnızca türün belirli bir derlemede TypeDescriptionProviderAttribute olduğunu varsayar gibi bir yöntemi Assembly.GetType veya aşırı yüklemesini Activator.CreateInstance çağırarak türü yüklemek için yansıma kullanan uygulamaları etkiler. Bu durumda, yöntem çağrısında başvuruda bulunılan derleme türün yeni derleme konumunu yansıtacak şekilde güncelleştirilmelidir.

Kategori

Windows Forms

Etkilenen API’ler

Yok.


ZipArchiveEntry artık tutarsız giriş boyutlarına sahip arşivleri işlemez

Zip arşivleri merkezi dizinde ve yerel üst bilgide hem sıkıştırılmış boyutu hem de sıkıştırılmamış boyutu listeler. Giriş verilerinin kendisi de boyutunu gösterir. .NET Core 2.2 ve önceki sürümlerde bu değerler hiçbir zaman tutarlılık açısından denetlenmedi. .NET Core 3.0'dan başlayarak artık.

Açıklama değiştirildi

.NET Core 2.2 ve önceki sürümlerde, ZipArchiveEntry.Open() yerel üst bilgi zip dosyasının merkezi üst bilgisi ile aynı fikirde olmasa bile başarılı olur. Uzunluğu merkezi dizinde/yerel üst bilgide listelenen sıkıştırılmamış dosya boyutunu aşsa bile sıkıştırılmış akışın sonuna ulaşılana kadar veriler sıkıştırılır.

.NET Core 3.0'dan başlayarak yöntem, ZipArchiveEntry.Open() yerel üst bilgi ve merkezi üst bilginin bir girdinin sıkıştırılmış ve sıkıştırılmamış boyutları üzerinde aynı fikirde olup olmadığını denetler. Aksi takdirde yöntemi, arşivin yerel üst bilgisi ve/veya veri tanımlayıcısı liste boyutlarının zip dosyasının merkezi dizinine katılmaması durumunda bir InvalidDataException oluşturur. Bir girdi okunurken, sıkıştırılmış veriler üst bilgide listelenen sıkıştırılmamış dosya boyutuna yuvarlanır.

Bu değişiklik, bir ZipArchiveEntry öğesinin verilerinin boyutunu doğru bir şekilde temsil etmesini ve yalnızca bu miktarda verinin okunmasını sağlamak için yapılmıştır.

Sürüm kullanıma sunulmuştur

3.0

Bu sorunları sergileyen tüm zip arşivlerini yeniden paketleyebilirsiniz.

Kategori

Core .NET kitaplıkları

Etkilenen API’ler


FieldInfo.SetValue statik, yalnızca init alanları için özel durum oluşturuyor

.NET Core 3.0'dan başlayarak, statik bir alanda çağrılarak System.Reflection.FieldInfo.SetValuebir değer ayarlamaya çalıştığınızda bir InitOnly özel durum oluşturulur.

Açıklama değiştirildi

.NET Framework ve .NET Core'un 3.0 öncesi sürümlerinde, başlatıldıktan System.Reflection.FieldInfo.SetValuesonra sabit olan statik bir alanın değerini çağırarak ayarlayabilirsiniz (C#'de salt okunur). Ancak, böyle bir alanın bu şekilde ayarlanması hedef çerçeve ve iyileştirme ayarlarına göre öngörülemeyen davranışlara neden oldu.

.NET Core 3.0 ve sonraki sürümlerde statik bir InitOnly alanda çağrı SetValue yaptığınızda bir System.FieldAccessException özel durum oluşturulur.

İpucu

Alan InitOnly , yalnızca bildirildiğinde veya içeren sınıfın oluşturucusunda ayarlanabilen bir alantır. Başka bir deyişle başlatıldıktan sonra sabittir.

Sürüm kullanıma sunulmuştur

3.0

Statik oluşturucudaki statik InitOnly alanları başlatın. Bu, hem dinamik hem de dinamik olmayan türler için geçerlidir.

Alternatif olarak, özniteliğini alanından kaldırabilir FieldAttributes.InitOnly ve çağrısı FieldInfo.SetValueyapabilirsiniz.

Kategori

Core .NET kitaplıkları

Etkilenen API’ler


.NET Core 2.1

Yol API'leri geçersiz karakterler için özel durum oluşturmaz

Dosya yollarını içeren API'ler artık yol karakterlerini doğrulamaz veya geçersiz bir karakter bulunursa bir ArgumentException oluşturmaz.

Açıklama değiştirildi

.NET Framework ve .NET Core 1.0 - 2.0'da, Etkilenen API'ler bölümünde listelenen yöntemler yol bağımsız değişkeni geçersiz bir ArgumentException yol karakteri içeriyorsa bir oluşturur. .NET Core 2.1'den başlayarak, bu yöntemler artık geçersiz yol karakterlerini denetlemez veya geçersiz bir karakter bulunursa bir özel durum oluşturmaz.

Değişiklik nedeni

Yol karakterlerinin agresif bir şekilde doğrulanması bazı platformlar arası senaryoları engeller. Bu değişiklik, .NET'in işletim sistemi API çağrılarının sonucunu çoğaltmaya veya tahmin etmeye çalışmaması için sunulmuştur. Daha fazla bilgi için .NET Core 2.1'deki System.IO göz atma blog gönderisine bakın.

Sürüm kullanıma sunulmuştur

.NET Core 2.1

Kodunuz geçersiz karakterleri denetlemek için bu API'lere bağlıysa, öğesine Path.GetInvalidPathCharsbir çağrı ekleyebilirsiniz.

Etkilenen API’ler

Ayrıca bkz.


Yerleşik yapı türlerine eklenen özel alanlar

Başvuru derlemelerindeki belirli yapı türlerine özel alanlar eklendi. Sonuç olarak, C# dilinde bu yapı türleri her zaman yeni işleç veya varsayılan değişmez değer kullanılarak örneklenmelidir.

Açıklama değiştirildi

.NET Core 2.0 ve önceki sürümlerde, sağlanan bazı yapı türleri, örneğin, ConsoleKeyInfoC# içinde işleç veya varsayılan değişmez değer kullanılmadan new örneklenebilir. Bunun nedeni C# derleyicisi tarafından kullanılan başvuru derlemelerinin yapıların özel alanlarını içermemiş olmasıydı. .NET yapı türleri için tüm özel alanlar .NET Core 2.1'den başlayarak başvuru derlemelerine eklenir.

Örneğin, aşağıdaki C# kodu .NET Core 2.0'da derlenmiş ancak .NET Core 2.1'de derlenmemektedir:

ConsoleKeyInfo key;    // Struct type

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

.NET Core 2.1'de, önceki kod şu derleyici hatasıyla sonuçlanır: CS0165 - Atanmamış yerel değişken 'key' kullanımı

Sürüm kullanıma sunulmuştur

2.1

işlecini veya varsayılan değişmez değeri kullanarak yapı türlerinin new örneğini oluşturma.

Örneğin:

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

Kategori

Core .NET kitaplıkları

Etkilenen API’ler


UseShellExecute varsayılan değerinde değişiklik

ProcessStartInfo.UseShellExecute .NET Core üzerinde varsayılan değerine false sahiptir. .NET Framework'te varsayılan değeridir true.

Açıklama değiştirildi

Process.Start , örneğin Paint'i başlatan kodla Process.Start("mspaint.exe") bir uygulamayı doğrudan başlatmanıza olanak tanır. Ayrıca, olarak ayarlanırsa ProcessStartInfo.UseShellExecutetrueilişkili bir uygulamayı dolaylı olarak başlatmanıza da olanak tanır. .NET Framework'te için varsayılan değer ProcessStartInfo.UseShellExecute olan değeri, true.txt dosyaları bu düzenleyiciyle ilişkilendirdiyseniz gibi kodun Process.Start("mytextfile.txt") Not Defteri başlatacağı anlamına gelir. .NET Framework'te dolaylı olarak bir uygulamanın başlatılmasını önlemek için açıkça olarak falseolarak ayarlamanız ProcessStartInfo.UseShellExecute gerekir. .NET Core'da için ProcessStartInfo.UseShellExecute varsayılan değer şeklindedir false. Bu, çağrısı yaptığınızda Process.Startvarsayılan olarak ilişkili uygulamaların başlatılmadığı anlamına gelir.

üzerindeki System.Diagnostics.ProcessStartInfo aşağıdaki özellikler yalnızca şu durumlarda ProcessStartInfo.UseShellExecute işlevseldir true:

Bu değişiklik performans nedenleriyle .NET Core'da kullanıma sunulmuştur. Genellikle, Process.Start bir uygulamayı doğrudan başlatmak için kullanılır. Bir uygulamayı doğrudan başlatmanın Windows kabuğunu içermesi ve ilişkili performans maliyetine neden olması gerekmez. Bu varsayılan olayı daha hızlı hale getirmek için .NET Core varsayılan değerini ProcessStartInfo.UseShellExecute olarak falsedeğiştirir. Gerekirse daha yavaş yolu seçebilirsiniz.

Sürüm kullanıma sunulmuştur

2.1

Not

.NET Core'un önceki sürümlerinde Windows UseShellExecute için uygulanmamıştı.

Uygulamanız eski davranışa bağlıysa, nesnesi üzerinde olarak ayarlanmış true olarak UseShellExecute çağrısı Process.Start(ProcessStartInfo) yapınProcessStartInfo.

Kategori

Core .NET kitaplıkları

Etkilenen API’ler


macOS'ta OpenSSL sürümleri

macOS üzerindeki .NET Core 3.0 ve üzeri çalışma zamanları artık , ve türleri için OpenSSL 1.0.x sürümlerine AesCcmECDiffieHellmanOpenSslDSAOpenSslECDsaOpenSslAesGcmRSAOpenSslOpenSSL 1.1.x sürümlerini tercih ediyor.SafeEvpPKeyHandle

.NET Core 2.1 çalışma zamanı artık OpenSSL 1.1.x sürümlerini destekliyor, ancak yine de OpenSSL 1.0.x sürümlerini tercih ediyor.

Açıklama değiştirildi

Daha önce .NET Core çalışma zamanı, OpenSSL ile etkileşim kuran türler için macOS üzerinde OpenSSL 1.0.x sürümlerini kullanıyordu. En son OpenSSL 1.0.x sürümü olan OpenSSL 1.0.2 artık destekten çıktı. OpenSSL'in desteklenen sürümlerinde OpenSSL kullanan türleri korumak için .NET Core 3.0 ve üzeri çalışma zamanları artık macOS üzerinde OpenSSL'nin daha yeni sürümlerini kullanıyor.

Bu değişiklikle, macOS'ta .NET Core çalışma zamanlarının davranışı aşağıdaki gibidir:

  • .NET Core 3.0 ve sonraki sürüm çalışma zamanları, varsa OpenSSL 1.1.x kullanır ve yalnızca 1.1.x sürümü yoksa OpenSSL 1.0.x sürümüne geri döner.

    OpenSSL birlikte çalışma türlerini özel P/Invoke'larla kullanan arayanlar için, açıklamalardaki SafeEvpPKeyHandle.OpenSslVersion yönergeleri izleyin. Değeri denetlemezseniz OpenSslVersion uygulamanız kilitlenebilir.

  • .NET Core 2.1 çalışma zamanı, varsa OpenSSL 1.0.x kullanır ve 1.0.x sürümü yoksa OpenSSL 1.1.x sürümüne geri döner.

    Özelliği .NET Core 2.1'de olmadığından 2.1 çalışma zamanı OpenSSL'nin SafeEvpPKeyHandle.OpenSslVersion önceki sürümünü tercih eder, bu nedenle OpenSSL sürümü çalışma zamanında güvenilir bir şekilde belirlenemez.

Sürüm kullanıma sunulmuştur

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

Kategori

Core .NET kitaplıkları

Etkilenen API’ler


.NET Core 1.0

FileSystemInfo.Attributes tarafından unauthorizedAccessException oluşturuldu

.NET Core'da, UnauthorizedAccessException çağıran bir dosya özniteliği değeri ayarlamaya çalıştığında ancak yazma izni olmadığında bir oluşturulur.

Açıklama değiştirildi

.NET Framework'te, ArgumentException çağıran içinde bir dosya özniteliği değeri FileSystemInfo.Attributes ayarlamaya çalıştığında ancak yazma izni olmadığında bir oluşturulur. .NET Core'da bunun yerine bir UnauthorizedAccessException oluşturulur. (.NET Core'da, çağıran geçersiz bir ArgumentException dosya özniteliği ayarlamayı denerse yine de bir oluşturulur.)

Sürüm kullanıma sunulmuştur

1.0

Deyimleri catch gerektiği gibi yerine veya buna ek olarak bir yakalamak UnauthorizedAccessException için ArgumentExceptiondeğiştirin.

Kategori

Core .NET kitaplıkları

Etkilenen API’ler


Bozuk durum özel durumlarını işleme desteklenmiyor

.NET Core'da bozuk işlem durumu özel durumlarını işleme desteklenmez.

Açıklama değiştirildi

Daha önce, bozuk işlem durumu özel durumları yönetilen kod özel durum işleyicileri tarafından yakalanabiliyordu ve işlenebilirdi, örneğin, C# dilinde try-catch deyimi kullanılarak.

.NET Core 1.0'dan başlayarak, bozuk işlem durumu özel durumları yönetilen kod tarafından işlenemez. Ortak dil çalışma zamanı, yönetilen koda bozuk işlem durumu özel durumları sunmaz.

Sürüm kullanıma sunulmuştur

1.0

Bunun yerine bunlara yol açan durumları ele alarak bozuk işlem durumu özel durumlarını işleme gereğinden kaçının. Bozuk işlem durumu özel durumlarını işlemek kesinlikle gerekliyse, özel durum işleyicisini C veya C++ koduna yazın.

Kategori

Core .NET kitaplıkları

Etkilenen API’ler


UriBuilder özellikleri artık baştaki karakterlerin başına eklenmez

UriBuilder.Fragment artık bir baştaki # karakterin başına eklenmez ve UriBuilder.Query bir karakter zaten mevcut olduğunda artık bir baş ? karakterin başına eklenmez.

Açıklama değiştirildi

.NET Framework'te UriBuilder.Fragment ve UriBuilder.Query özellikleri her zaman depolanmakta olan değere sırasıyla bir # veya ? karakteri ekler. Bu davranış, dize bu öndeki karakterlerden birini içeriyorsa depolanan değerde birden çok # veya ? karaktere neden olabilir. Örneğin, değeri UriBuilder.Fragment olabilir ##main.

.NET Core 1.0 sürümünden başlayarak, dizenin # başında zaten varsa, bu özellikler artık veya ? karakterlerini depolanan değere eklemez.

Sürüm kullanıma sunulmuştur

1.0

Özellik değerlerini ayarlarken artık bu baştaki karakterlerden herhangi birini açıkça kaldırmanız gerekmez. Bu, özellikle değerleri eklerken yararlıdır, çünkü artık baştaki # veya ? her eklediğinizde kaldırmak zorunda kalmazsınız.

Örneğin, aşağıdaki kod parçacığı .NET Framework ile .NET Core arasındaki davranış farkını gösterir.

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

Console.WriteLine(builder.Query);
  • .NET Framework'te çıkış şeklindedir ????one=1&two=2&three=3&four=4.
  • .NET Core'da çıkış şeklindedir ?one=1&two=2&three=3&four=4.

Kategori

Core .NET kitaplıkları

Etkilenen API’ler


Process.StartInfo, başlatmadığınız işlemler için InvalidOperationException oluşturur

Kodunuzun Process.StartInfo başlatılamayan işlemler için özelliğinin okunması bir InvalidOperationExceptionoluşturur.

Açıklama değiştirildi

.NET Framework'te, kodunuzun Process.StartInfo başlatmamış olduğu işlemlerin özelliğine erişmek, sahte ProcessStartInfo bir nesne döndürür. Sahte nesne, dışındaki EnvironmentVariablestüm özellikleri için varsayılan değerleri içerir.

.NET Core 1.0'dan başlayarak, başlatmadığınız bir işlemin özelliğini okursanız Process.StartInfo (yani çağırarak Process.Start), bir InvalidOperationException oluşturulur.

Sürüm kullanıma sunulmuştur

1.0

Kodunuzun Process.StartInfo başlatmadığı işlemler için özelliğine erişin. Örneğin, tarafından Process.GetProcessesdöndürülen işlemler için bu özelliği okumayın.

Kategori

Core .NET kitaplıkları

Etkilenen API’ler