.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:
.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.GroupCollection IEnumerable<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.
Önerilen eylem
Ö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:
- System.Collections.Immutable.ImmutableArray.ToImmutableArray<TSource>(IEnumerable<TSource>)
- System.Collections.Immutable.ImmutableDictionary.ToImmutableDictionary
- System.Collections.Immutable.ImmutableHashSet.ToImmutableHashSet
- System.Collections.Immutable.ImmutableList.ToImmutableList<TSource>(IEnumerable<TSource>)
- System.Collections.Immutable.ImmutableSortedDictionary.ToImmutableSortedDictionary
- System.Collections.Immutable.ImmutableSortedSet.ToImmutableSortedSet
- System.Data.DataTableExtensions.CopyToDataTable
- Yöntemlerin
System.Linq.Enumerable
çoğu, örneğin, System.Linq.Enumerable.Count - System.Linq.ParallelEnumerable.AsParallel
- System.Linq.Queryable.AsQueryable
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.
Sürüm kullanıma sunulmuştur
3.0
Önerilen eylem
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
Önerilen eylem
Ç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.ToString Single.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
Önerilen eylem
.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
Önerilen eylem
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.IsInfinity Single.IsInfinitytrue
test eden birIf
deyime gerekli kodları yerleştirmeniz gerekir.Kodunuz kayan nokta değerlerinin olmadığını
Infinity
varsayar. Bu durumda, veNegativeInfinity
öğesinin kayan nokta değerleriniPositiveInfinity
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
Önerilen eylem
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: true
UTF8Encoding
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
Önerilen eylem
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
Önerilen eylem
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
Önerilen eylem
Bu sorunları sergileyen tüm zip arşivlerini yeniden paketleyebilirsiniz.
Kategori
Core .NET kitaplıkları
Etkilenen API’ler
- ZipArchiveEntry.Open()
- ZipFileExtensions.ExtractToDirectory
- ZipFileExtensions.ExtractToFile
- ZipFile.ExtractToDirectory
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
Önerilen eylem
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
- FieldInfo.SetValue(Object, Object)
- FieldInfo.SetValue(Object, Object, BindingFlags, Binder, CultureInfo)
.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
Önerilen eylem
Kodunuz geçersiz karakterleri denetlemek için bu API'lere bağlıysa, öğesine Path.GetInvalidPathCharsbir çağrı ekleyebilirsiniz.
Etkilenen API’ler
- System.IO.Directory.CreateDirectory
- System.IO.Directory.Delete
- System.IO.Directory.EnumerateDirectories
- System.IO.Directory.EnumerateFiles
- System.IO.Directory.EnumerateFileSystemEntries
- System.IO.Directory.GetCreationTime(String)
- System.IO.Directory.GetCreationTimeUtc(String)
- System.IO.Directory.GetDirectories
- System.IO.Directory.GetDirectoryRoot(String)
- System.IO.Directory.GetFiles
- System.IO.Directory.GetFileSystemEntries
- System.IO.Directory.GetLastAccessTime(String)
- System.IO.Directory.GetLastAccessTimeUtc(String)
- System.IO.Directory.GetLastWriteTime(String)
- System.IO.Directory.GetLastWriteTimeUtc(String)
- System.IO.Directory.GetParent(String)
- System.IO.Directory.Move(String, String)
- System.IO.Directory.SetCreationTime(String, DateTime)
- System.IO.Directory.SetCreationTimeUtc(String, DateTime)
- System.IO.Directory.SetCurrentDirectory(String)
- System.IO.Directory.SetLastAccessTime(String, DateTime)
- System.IO.Directory.SetLastAccessTimeUtc(String, DateTime)
- System.IO.Directory.SetLastWriteTime(String, DateTime)
- System.IO.Directory.SetLastWriteTimeUtc(String, DateTime)
- System.IO.DirectoryInfo ctor
- System.IO.Directory.GetDirectories
- System.IO.Directory.GetFiles
- System.IO.DirectoryInfo.GetFileSystemInfos
- System.IO.File.AppendAllText
- System.IO.File.AppendAllTextAsync
- System.IO.File.Copy
- System.IO.File.Create
- System.IO.File.CreateText
- System.IO.File.Decrypt
- System.IO.File.Delete
- System.IO.File.Encrypt
- System.IO.File.GetAttributes(String)
- System.IO.File.GetCreationTime(String)
- System.IO.File.GetCreationTimeUtc(String)
- System.IO.File.GetLastAccessTime(String)
- System.IO.File.GetLastAccessTimeUtc(String)
- System.IO.File.GetLastWriteTime(String)
- System.IO.File.GetLastWriteTimeUtc(String)
- System.IO.File.Move
- System.IO.File.Open
- System.IO.File.OpenRead(String)
- System.IO.File.OpenText(String)
- System.IO.File.OpenWrite(String)
- System.IO.File.ReadAllBytes(String)
- System.IO.File.ReadAllBytesAsync(String, CancellationToken)
- System.IO.File.ReadAllLines(String)
- System.IO.File.ReadAllLinesAsync(String, CancellationToken)
- System.IO.File.ReadAllText(String)
- System.IO.File.ReadAllTextAsync(String, CancellationToken)
- System.IO.File.SetAttributes(String, FileAttributes)
- System.IO.File.SetCreationTime(String, DateTime)
- System.IO.File.SetCreationTimeUtc(String, DateTime)
- System.IO.File.SetLastAccessTime(String, DateTime)
- System.IO.File.SetLastAccessTimeUtc(String, DateTime)
- System.IO.File.SetLastWriteTime(String, DateTime)
- System.IO.File.SetLastWriteTimeUtc(String, DateTime)
- System.IO.File.WriteAllBytes(String, Byte[])
- System.IO.File.WriteAllBytesAsync(String, Byte[], CancellationToken)
- System.IO.File.WriteAllLines
- System.IO.File.WriteAllLinesAsync
- System.IO.File.WriteAllText
- System.IO.FileInfo ctor
- System.IO.FileInfo.CopyTo
- System.IO.FileInfo.MoveTo
- System.IO.FileStream ctor
- System.IO.Path.GetFullPath(String)
- System.IO.Path.IsPathRooted(String)
- System.IO.Path.GetPathRoot(String)
- System.IO.Path.ChangeExtension(String, String)
- System.IO.Path.GetDirectoryName(String)
- System.IO.Path.GetExtension(String)
- System.IO.Path.HasExtension(String)
- System.IO.Path.Combine
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
Önerilen eylem
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
- System.ArraySegment<T>.Enumerator
- System.ArraySegment<T>
- System.Boolean
- System.Buffers.MemoryHandle
- System.Buffers.StandardFormat
- System.Byte
- System.Char
- System.Collections.DictionaryEntry
- System.Collections.Generic.Dictionary<TKey,TValue>.Enumerator
- System.Collections.Generic.Dictionary<TKey,TValue>.KeyCollection.Enumerator
- System.Collections.Generic.Dictionary<TKey,TValue>.ValueCollection.Enumerator
- System.Collections.Generic.HashSet<T>.Enumerator
- System.Collections.Generic.KeyValuePair<TKey,TValue>
- System.Collections.Generic.LinkedList<T>.Enumerator
- System.Collections.Generic.List<T>.Enumerator
- System.Collections.Generic.Queue<T>.Enumerator
- System.Collections.Generic.SortedDictionary<TKey,TValue>.Enumerator
- System.Collections.Generic.SortedDictionary<TKey,TValue>.KeyCollection.Enumerator
- System.Collections.Generic.SortedDictionary<TKey,TValue>.ValueCollection.Enumerator
- System.Collections.Generic.SortedSet<T>.Enumerator
- System.Collections.Generic.Stack<T>.Enumerator
- System.Collections.Immutable.ImmutableArray<T>.Enumerator
- System.Collections.Immutable.ImmutableArray<T>
- System.Collections.Immutable.ImmutableDictionary<TKey,TValue>.Enumerator
- System.Collections.Immutable.ImmutableHashSet<T>.Enumerator
- System.Collections.Immutable.ImmutableList<T>.Enumerator
- System.Collections.Immutable.ImmutableQueue<T>.Enumerator
- System.Collections.Immutable.ImmutableSortedDictionary<TKey,TValue>.Enumerator
- System.Collections.Immutable.ImmutableSortedSet<T>.Enumerator
- System.Collections.Immutable.ImmutableStack<T>.Enumerator
- System.Collections.Specialized.BitVector32.Section
- System.Collections.Specialized.BitVector32
- LazyMemberInfo
- System.ComponentModel.Design.Serialization.MemberRelationship
- System.ConsoleKeyInfo
- System.Data.SqlTypes.SqlBinary
- System.Data.SqlTypes.SqlBoolean
- System.Data.SqlTypes.SqlByte
- System.Data.SqlTypes.SqlDateTime
- System.Data.SqlTypes.SqlDecimal
- System.Data.SqlTypes.SqlDouble
- System.Data.SqlTypes.SqlGuid
- System.Data.SqlTypes.SqlInt16
- System.Data.SqlTypes.SqlInt32
- System.Data.SqlTypes.SqlInt64
- System.Data.SqlTypes.SqlMoney
- System.Data.SqlTypes.SqlSingle
- System.Data.SqlTypes.SqlString
- System.DateTime
- System.DateTimeOffset
- System.Decimal
- System.Diagnostics.CounterSample
- System.Diagnostics.SymbolStore.SymbolToken
- System.Diagnostics.Tracing.EventSource.EventData
- System.Diagnostics.Tracing.EventSourceOptions
- System.Double
- System.Drawing.CharacterRange
- System.Drawing.Point
- System.Drawing.PointF
- System.Drawing.Rectangle
- System.Drawing.RectangleF
- System.Drawing.Size
- System.Drawing.SizeF
- System.Guid
- System.HashCode
- System.Int16
- System.Int32
- System.Int64
- System.IntPtr
- System.IO.Pipelines.FlushResult
- System.IO.Pipelines.ReadResult
- System.IO.WaitForChangedResult
- System.Memory<T>
- System.ModuleHandle
- System.Net.Security.SslApplicationProtocol
- System.Net.Sockets.IPPacketInformation
- System.Net.Sockets.SocketInformation
- System.Net.Sockets.UdpReceiveResult
- System.Net.WebSockets.ValueWebSocketReceiveResult
- System.Nullable<T>
- System.Numerics.BigInteger
- System.Numerics.Complex
- System.Numerics.Vector<T>
- System.ReadOnlyMemory<T>
- System.ReadOnlySpan<T>.Enumerator
- System.ReadOnlySpan<T>
- System.Reflection.CustomAttributeNamedArgument
- System.Reflection.CustomAttributeTypedArgument
- System.Reflection.Emit.Label
- System.Reflection.Emit.OpCode
- System.Reflection.Metadata.ArrayShape
- System.Reflection.Metadata.AssemblyDefinition
- System.Reflection.Metadata.AssemblyDefinitionHandle
- System.Reflection.Metadata.AssemblyFile
- System.Reflection.Metadata.AssemblyFileHandle
- System.Reflection.Metadata.AssemblyFileHandleCollection.Enumerator
- System.Reflection.Metadata.AssemblyFileHandleCollection
- System.Reflection.Metadata.AssemblyReference
- System.Reflection.Metadata.AssemblyReferenceHandle
- System.Reflection.Metadata.AssemblyReferenceHandleCollection.Enumerator
- System.Reflection.Metadata.AssemblyReferenceHandleCollection
- System.Reflection.Metadata.Blob
- System.Reflection.Metadata.BlobBuilder.Blobs
- System.Reflection.Metadata.BlobContentId
- System.Reflection.Metadata.BlobHandle
- System.Reflection.Metadata.BlobReader
- System.Reflection.Metadata.BlobWriter
- System.Reflection.Metadata.Constant
- System.Reflection.Metadata.ConstantHandle
- System.Reflection.Metadata.CustomAttribute
- System.Reflection.Metadata.CustomAttributeHandle
- System.Reflection.Metadata.CustomAttributeHandleCollection.Enumerator
- System.Reflection.Metadata.CustomAttributeHandleCollection
- System.Reflection.Metadata.CustomAttributeNamedArgument<TType>
- System.Reflection.Metadata.CustomAttributeTypedArgument<TType>
- System.Reflection.Metadata.CustomAttributeValue<TType>
- System.Reflection.Metadata.CustomDebugInformation
- System.Reflection.Metadata.CustomDebugInformationHandle
- System.Reflection.Metadata.CustomDebugInformationHandleCollection.Enumerator
- System.Reflection.Metadata.CustomDebugInformationHandleCollection
- System.Reflection.Metadata.DeclarativeSecurityAttribute
- System.Reflection.Metadata.DeclarativeSecurityAttributeHandle
- System.Reflection.Metadata.DeclarativeSecurityAttributeHandleCollection.Enumerator
- System.Reflection.Metadata.DeclarativeSecurityAttributeHandleCollection
- System.Reflection.Metadata.Document
- System.Reflection.Metadata.DocumentHandle
- System.Reflection.Metadata.DocumentHandleCollection.Enumerator
- System.Reflection.Metadata.DocumentHandleCollection
- System.Reflection.Metadata.DocumentNameBlobHandle
- System.Reflection.Metadata.Ecma335.ArrayShapeEncoder
- System.Reflection.Metadata.Ecma335.BlobEncoder
- System.Reflection.Metadata.Ecma335.CustomAttributeArrayTypeEncoder
- System.Reflection.Metadata.Ecma335.CustomAttributeElementTypeEncoder
- System.Reflection.Metadata.Ecma335.CustomAttributeNamedArgumentsEncoder
- System.Reflection.Metadata.Ecma335.CustomModifiersEncoder
- System.Reflection.Metadata.Ecma335.EditAndContinueLogEntry
- System.Reflection.Metadata.Ecma335.ExceptionRegionEncoder
- System.Reflection.Metadata.Ecma335.FixedArgumentsEncoder
- System.Reflection.Metadata.Ecma335.GenericTypeArgumentsEncoder
- System.Reflection.Metadata.Ecma335.InstructionEncoder
- System.Reflection.Metadata.Ecma335.LabelHandle
- System.Reflection.Metadata.Ecma335.LiteralEncoder
- System.Reflection.Metadata.Ecma335.LiteralsEncoder
- System.Reflection.Metadata.Ecma335.LocalVariablesEncoder
- System.Reflection.Metadata.Ecma335.LocalVariableTypeEncoder
- System.Reflection.Metadata.Ecma335.MethodBodyStreamEncoder.MethodBody
- System.Reflection.Metadata.Ecma335.MethodBodyStreamEncoder
- System.Reflection.Metadata.Ecma335.MethodSignatureEncoder
- System.Reflection.Metadata.Ecma335.NamedArgumentsEncoder
- System.Reflection.Metadata.Ecma335.NamedArgumentTypeEncoder
- System.Reflection.Metadata.Ecma335.NameEncoder
- System.Reflection.Metadata.Ecma335.ParametersEncoder
- System.Reflection.Metadata.Ecma335.ParameterTypeEncoder
- System.Reflection.Metadata.Ecma335.PermissionSetEncoder
- System.Reflection.Metadata.Ecma335.ReturnTypeEncoder
- System.Reflection.Metadata.Ecma335.ScalarEncoder
- System.Reflection.Metadata.Ecma335.SignatureDecoder<TType,TGenericContext>
- System.Reflection.Metadata.Ecma335.SignatureTypeEncoder
- System.Reflection.Metadata.Ecma335.VectorEncoder
- System.Reflection.Metadata.EntityHandle
- System.Reflection.Metadata.EventAccessors
- System.Reflection.Metadata.EventDefinition
- System.Reflection.Metadata.EventDefinitionHandle
- System.Reflection.Metadata.EventDefinitionHandleCollection.Enumerator
- System.Reflection.Metadata.EventDefinitionHandleCollection
- System.Reflection.Metadata.ExceptionRegion
- System.Reflection.Metadata.ExportedType
- System.Reflection.Metadata.ExportedTypeHandle
- System.Reflection.Metadata.ExportedTypeHandleCollection.Enumerator
- System.Reflection.Metadata.ExportedTypeHandleCollection
- System.Reflection.Metadata.FieldDefinition
- System.Reflection.Metadata.FieldDefinitionHandle
- System.Reflection.Metadata.FieldDefinitionHandleCollection.Enumerator
- System.Reflection.Metadata.FieldDefinitionHandleCollection
- System.Reflection.Metadata.GenericParameter
- System.Reflection.Metadata.GenericParameterConstraint
- System.Reflection.Metadata.GenericParameterConstraintHandle
- System.Reflection.Metadata.GenericParameterConstraintHandleCollection.Enumerator
- System.Reflection.Metadata.GenericParameterConstraintHandleCollection
- System.Reflection.Metadata.GenericParameterHandle
- System.Reflection.Metadata.GenericParameterHandleCollection.Enumerator
- System.Reflection.Metadata.GenericParameterHandleCollection
- System.Reflection.Metadata.GuidHandle
- System.Reflection.Metadata.Handle
- System.Reflection.Metadata.ImportDefinition
- System.Reflection.Metadata.ImportDefinitionCollection.Enumerator
- System.Reflection.Metadata.ImportDefinitionCollection
- System.Reflection.Metadata.ImportScope
- System.Reflection.Metadata.ImportScopeCollection.Enumerator
- System.Reflection.Metadata.ImportScopeCollection
- System.Reflection.Metadata.ImportScopeHandle
- System.Reflection.Metadata.InterfaceImplementation
- System.Reflection.Metadata.InterfaceImplementationHandle
- System.Reflection.Metadata.InterfaceImplementationHandleCollection.Enumerator
- System.Reflection.Metadata.InterfaceImplementationHandleCollection
- System.Reflection.Metadata.LocalConstant
- System.Reflection.Metadata.LocalConstantHandle
- System.Reflection.Metadata.LocalConstantHandleCollection.Enumerator
- System.Reflection.Metadata.LocalConstantHandleCollection
- System.Reflection.Metadata.LocalScope
- System.Reflection.Metadata.LocalScopeHandle
- System.Reflection.Metadata.LocalScopeHandleCollection.ChildrenEnumerator
- System.Reflection.Metadata.LocalScopeHandleCollection.Enumerator
- System.Reflection.Metadata.LocalScopeHandleCollection
- System.Reflection.Metadata.LocalVariable
- System.Reflection.Metadata.LocalVariableHandle
- System.Reflection.Metadata.LocalVariableHandleCollection.Enumerator
- System.Reflection.Metadata.LocalVariableHandleCollection
- System.Reflection.Metadata.ManifestResource
- System.Reflection.Metadata.ManifestResourceHandle
- System.Reflection.Metadata.ManifestResourceHandleCollection.Enumerator
- System.Reflection.Metadata.ManifestResourceHandleCollection
- System.Reflection.Metadata.MemberReference
- System.Reflection.Metadata.MemberReferenceHandle
- System.Reflection.Metadata.MemberReferenceHandleCollection.Enumerator
- System.Reflection.Metadata.MemberReferenceHandleCollection
- System.Reflection.Metadata.MetadataStringComparer
- System.Reflection.Metadata.MethodDebugInformation
- System.Reflection.Metadata.MethodDebugInformationHandle
- System.Reflection.Metadata.MethodDebugInformationHandleCollection.Enumerator
- System.Reflection.Metadata.MethodDebugInformationHandleCollection
- System.Reflection.Metadata.MethodDefinition
- System.Reflection.Metadata.MethodDefinitionHandle
- System.Reflection.Metadata.MethodDefinitionHandleCollection.Enumerator
- System.Reflection.Metadata.MethodDefinitionHandleCollection
- System.Reflection.Metadata.MethodImplementation
- System.Reflection.Metadata.MethodImplementationHandle
- System.Reflection.Metadata.MethodImplementationHandleCollection.Enumerator
- System.Reflection.Metadata.MethodImplementationHandleCollection
- System.Reflection.Metadata.MethodImport
- System.Reflection.Metadata.MethodSignature<TType>
- System.Reflection.Metadata.MethodSpecification
- System.Reflection.Metadata.MethodSpecificationHandle
- System.Reflection.Metadata.ModuleDefinition
- System.Reflection.Metadata.ModuleDefinitionHandle
- System.Reflection.Metadata.ModuleReference
- System.Reflection.Metadata.ModuleReferenceHandle
- System.Reflection.Metadata.NamespaceDefinition
- System.Reflection.Metadata.NamespaceDefinitionHandle
- System.Reflection.Metadata.Parameter
- System.Reflection.Metadata.ParameterHandle
- System.Reflection.Metadata.ParameterHandleCollection.Enumerator
- System.Reflection.Metadata.ParameterHandleCollection
- System.Reflection.Metadata.PropertyAccessors
- System.Reflection.Metadata.PropertyDefinition
- System.Reflection.Metadata.PropertyDefinitionHandle
- System.Reflection.Metadata.PropertyDefinitionHandleCollection.Enumerator
- System.Reflection.Metadata.PropertyDefinitionHandleCollection
- System.Reflection.Metadata.ReservedBlob<THandle>
- System.Reflection.Metadata.SequencePoint
- System.Reflection.Metadata.SequencePointCollection.Enumerator
- System.Reflection.Metadata.SequencePointCollection
- System.Reflection.Metadata.SignatureHeader
- System.Reflection.Metadata.StandaloneSignature
- System.Reflection.Metadata.StandaloneSignatureHandle
- System.Reflection.Metadata.StringHandle
- System.Reflection.Metadata.TypeDefinition
- System.Reflection.Metadata.TypeDefinitionHandle
- System.Reflection.Metadata.TypeDefinitionHandleCollection.Enumerator
- System.Reflection.Metadata.TypeDefinitionHandleCollection
- System.Reflection.Metadata.TypeLayout
- System.Reflection.Metadata.TypeReference
- System.Reflection.Metadata.TypeReferenceHandle
- System.Reflection.Metadata.TypeReferenceHandleCollection.Enumerator
- System.Reflection.Metadata.TypeReferenceHandleCollection
- System.Reflection.Metadata.TypeSpecification
- System.Reflection.Metadata.TypeSpecificationHandle
- System.Reflection.Metadata.UserStringHandle
- System.Reflection.ParameterModifier
- System.Reflection.PortableExecutable.CodeViewDebugDirectoryData
- System.Reflection.PortableExecutable.DebugDirectoryEntry
- System.Reflection.PortableExecutable.PEMemoryBlock
- System.Reflection.PortableExecutable.SectionHeader
- System.Runtime.CompilerServices.AsyncTaskMethodBuilder<TResult>
- System.Runtime.CompilerServices.AsyncTaskMethodBuilder
- System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder<TResult>
- System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder
- System.Runtime.CompilerServices.AsyncVoidMethodBuilder
- System.Runtime.CompilerServices.ConfiguredTaskAwaitable<TResult>.ConfiguredTaskAwaiter
- System.Runtime.CompilerServices.ConfiguredTaskAwaitable<TResult>
- System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter
- System.Runtime.CompilerServices.ConfiguredTaskAwaitable
- System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable<TResult>
- System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable<TResult>.ConfiguredValueTaskAwaiter
- System.Runtime.CompilerServices.TaskAwaiter<TResult>
- System.Runtime.CompilerServices.TaskAwaiter
- System.Runtime.CompilerServices.ValueTaskAwaiter<TResult>
- System.Runtime.CompilerServices.ValueTaskAwaiter<TResult>
- System.Runtime.InteropServices.ArrayWithOffset
- System.Runtime.InteropServices.GCHandle
- System.Runtime.InteropServices.HandleRef
- System.Runtime.InteropServices.OSPlatform
- System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken
- System.Runtime.Serialization.SerializationEntry
- System.Runtime.Serialization.StreamingContext
- System.RuntimeArgumentHandle
- System.RuntimeFieldHandle
- System.RuntimeMethodHandle
- System.RuntimeTypeHandle
- System.SByte
- System.Security.Cryptography.CngProperty
- System.Security.Cryptography.ECCurve
- System.Security.Cryptography.HashAlgorithmName
- System.Security.Cryptography.X509Certificates.X509ChainStatus
- System.Security.Cryptography.Xml.X509IssuerSerial
- System.ServiceProcess.SessionChangeDescription
- System.Single
- System.Span<T>.Enumerator
- System.Span<T>
- System.Threading.AsyncFlowControl
- System.Threading.AsyncLocalValueChangedArgs<T>
- System.Threading.CancellationToken
- System.Threading.CancellationTokenRegistration
- System.Threading.LockCookie
- System.Threading.SpinLock
- System.Threading.SpinWait
- System.Threading.Tasks.Dataflow.DataflowMessageHeader
- System.Threading.Tasks.ParallelLoopResult
- System.Threading.Tasks.ValueTask<TResult>
- System.TimeSpan
- System.TimeZoneInfo.TransitionTime
- System.Transactions.TransactionOptions
- System.TypedReference
- System.TypedReference
- System.UInt16
- System.UInt32
- System.UInt64
- System.UIntPtr
- System.Windows.Forms.ColorDialog.Color
- System.Windows.Media.Animation.KeyTime
- System.Windows.Media.Animation.RepeatBehavior
- System.Xml.Serialization.XmlDeserializationEvents
- Windows.Foundation.Point
- Windows.Foundation.Rect
- Windows.Foundation.Size
- Windows.UI.Color
- Windows.UI.Xaml.Controls.Primitives.GeneratorPosition
- Windows.UI.Xaml.CornerRadius
- Windows.UI.Xaml.Duration
- Windows.UI.Xaml.GridLength
- Windows.UI.Xaml.Media.Matrix
- Windows.UI.Xaml.Media.Media3D.Matrix3D
- Windows.UI.Xaml.Thickness
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.UseShellExecute true
iliş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 false
olarak 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.Start
varsayı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
:
- ProcessStartInfo.CreateNoWindow
- ProcessStartInfo.ErrorDialog
- ProcessStartInfo.Verb
- ProcessStartInfo.WindowStyle.
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 false
değ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ı.
Önerilen eylem
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
Önerilen eylem
Artık gerekli değilse OpenSSL sürüm 1.0.2'yi kaldırın.
, , AesGcm, ECDsaOpenSslECDiffieHellmanOpenSslDSAOpenSslRSAOpenSslveya SafeEvpPKeyHandle türlerini kullanıyorsanız AesCcmOpenSSL 1.1.x'i yükleyin.
OpenSSL birlikte çalışma türlerini özel P/Invoke'larla kullanıyorsanız, açıklamalardaki SafeEvpPKeyHandle.OpenSslVersion yönergeleri izleyin.
Kategori
Core .NET kitaplıkları
Etkilenen API’ler
- System.Security.Cryptography.AesCcm
- System.Security.Cryptography.AesGcm
- System.Security.Cryptography.DSAOpenSsl
- System.Security.Cryptography.ECDiffieHellmanOpenSsl
- System.Security.Cryptography.ECDsaOpenSsl
- System.Security.Cryptography.RSAOpenSsl
- System.Security.Cryptography.SafeEvpPKeyHandle
.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
Önerilen eylem
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
Önerilen eylem
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
- System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute
- legacyCorruptedStateExceptionsPolicy öğesi
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
Önerilen eylem
Ö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
Önerilen eylem
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ı