.NET 6’daki yenilikler

.NET 6, .NET 5 ile başlayan .NET birleştirme planının son parçalarını sunar. .NET 6, sdk'yı, temel kitaplıkları ve çalışma zamanını mobil, masaüstü, IoT ve bulut uygulamaları arasında bir hale getirir. .NET 6 ekosistemi, bu birleştirmeye ek olarak şunları da sunar:

  • Basitleştirilmiş geliştirme: Kullanmaya başlamak kolaydır. C# 10'daki yeni dil özellikleri, yazmanız gereken kod miktarını azaltır. Web yığınına ve minimum API'lere yapılan yatırımlar, daha küçük ve daha hızlı mikro hizmetler yazmayı kolaylaştırır.

  • Daha iyi performans: .NET 6, bulutta çalışıyorsanız işlem maliyetlerini düşüren en hızlı tam yığın web çerçevesidir.

  • Nihai üretkenlik: .NET 6 ve Visual Studio 2022 , sık erişimli yeniden yükleme, yeni git araçları, akıllı kod düzenleme, güçlü tanılama ve test araçları ve daha iyi ekip işbirliği sağlar.

.NET 6, uzun vadeli destek (LTS) sürümü olarak üç yıl boyunca desteklenecektir.

Önizleme özellikleri varsayılan olarak devre dışı bırakılır. Bunlar ayrıca üretimde kullanılmak üzere desteklenmez ve gelecekteki bir sürümde kaldırılabilir. Yeni RequiresPreviewFeaturesAttribute , önizleme API'lerine açıklama eklemek için kullanılır ve bu önizleme API'lerini kullanıyorsanız ilgili çözümleyici sizi uyarır.

.NET 6, Mac için Visual Studio 2022 ve Visual Studio 2022 (ve sonraki sürümler) tarafından desteklenir.

Bu makale , .NET 6'nın tüm yeni özelliklerini kapsamaz. Tüm yeni özellikleri görmek ve bu makalede listelenen özellikler hakkında daha fazla bilgi için .NET 6 Duyuruları blog gönderisine bakın.

Performans

.NET 6, çok sayıda performans geliştirmesi içerir. Bu bölümde FileStream, profil destekli iyileştirme ve AOT derlemesindeki bazı iyileştirmeler listelenir. Ayrıntılı bilgi için .NET 6'daki performans iyileştirmeleri blog gönderisine bakın.

Fılestream

Windows'ta System.IO.FileStream daha iyi performans ve güvenilirlik sağlamak amacıyla .NET 6 için tür yeniden yazıldı. FileStream Artık Windows'ta zaman uyumsuz G/Ç için oluşturulduğunda hiçbir zaman engellemeyin. Daha fazla bilgi için .NET 6'da Dosya GÇ geliştirmeleri blog gönderisine bakın.

Profil destekli iyileştirme

Profil destekli iyileştirme (PGO), JIT derleyicisinin en sık kullanılan türler ve kod yolları açısından iyileştirilmiş kod oluşturduğu yerdir. .NET 6, dinamik PGO'yu tanıtır. Dinamik PGO, katman 0 sırasında eklenen ek izlemelere göre kodu daha da iyileştirmek için katmanlı derleme ile el ele çalışır. Dinamik PGO varsayılan olarak devre dışıdır, ancak ortam değişkeniyle DOTNET_TieredPGOetkinleştirebilirsiniz. Daha fazla bilgi için bkz . JIT performans geliştirmeleri.

Crossgen2

.NET 6, kaldırılan Crossgen'in ardılı olan Crossgen2'yi tanıtır. Crossgen ve Crossgen2, bir uygulamanın başlangıç süresini geliştirmek için önceden derleme (AOT) sağlayan araçlardır. Crossgen2, C++ yerine C# dilinde yazılır ve önceki sürümle mümkün olmayan analiz ve iyileştirme gerçekleştirebilir. Daha fazla bilgi için bkz . Crossgen2 hakkında konuşma.

Arm64 desteği

.NET 6 sürümü, hem yerel Arm64 yürütmesi hem de x64 öykünmesi için macOS Arm64 (veya "Apple Silicon") ve Windows Arm64 işletim sistemleri için destek içerir. Ayrıca, x64 ve Arm64 .NET yükleyicileri artık yan yana yüklenir. Daha fazla bilgi için bkz . MacOS 11 ve Arm64 ve x64 için Windows 11 için .NET Desteği.

Çalışırken yeniden yükleme

Sık erişimli yeniden yükleme , uygulamanızın kaynak kodunu değiştirmenize ve bu değişiklikleri çalışan uygulamanıza anında uygulamanıza olanak tanıyan bir özelliktir. Özelliğin amacı, düzenlemeler arasında uygulama yeniden başlatmalarını önleyerek üretkenliğinizi artırmaktır. Sık erişimli yeniden yükleme, Visual Studio 2022'de ve komut satırı aracında dotnet watch kullanılabilir. Sık erişimli yeniden yükleme, çoğu .NET uygulaması türüyle ve C#, Visual Basic ve C++ kaynak kodu için çalışır. Daha fazla bilgi için Sık erişimli yeniden yükleme blog gönderisine bakın.

.NET MAUI

.NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI), 2022'nin ilk çeyreğinde yayın adayı ve 2022'nin ikinci çeyreğinde genel kullanılabilirlik (GA) ile önizleme aşamasındadır. .NET MAUI, tek bir kod tabanıyla masaüstü ve mobil işletim sistemleri için yerel istemci uygulamaları oluşturmayı mümkün kılar. Daha fazla bilgi için .NET'te Güncelleştirme Çok Platformlu Uygulama Kullanıcı Arabirimi blog gönderisine bakın.

C# 10 ve şablonlar

C# 10 yönergeleri, dosya kapsamlı ad alanı bildirimleri ve kayıt yapıları gibi global using yenilikleri içerir. Daha fazla bilgi için bkz . C# 10'daki yenilikler.

Bu çalışmayla uyumlu olarak, C# için .NET SDK proje şablonları bazı yeni dil özelliklerini kullanacak şekilde modernize edilmiştir:

  • async Main Yöntem
  • Üst düzey deyimler
  • Hedef türü belirtilmiş yeni ifadeler
  • Örtük global using yönergeler
  • Dosya kapsamlı ad alanları
  • Boş değer atanabilir başvuru türleri

Bu yeni dil özelliklerini proje şablonlarına ekleyerek, yeni kod özelliklerin etkinleştirildiği şekilde başlar. Ancak, .NET 6'ya yükselttiğiniz zaman mevcut kod etkilenmez. Bu şablon değişiklikleri hakkında daha fazla bilgi için .NET SDK: C# proje şablonları modernleştirilmiş blog gönderisine bakın.

F# ve Visual Basic

F# 6, F# diline ve F# Etkileşimli'ye çeşitli geliştirmeler ekler. Daha fazla bilgi için bkz . F# 6'daki yenilikler.

Visual Basic'in Visual Studio deneyiminde ve Windows Forms proje başlatmasında geliştirmeleri vardır.

SDK İş Yükleri

.NET SDK'sının boyutunu daha küçük tutmak için bazı bileşenler yeni, isteğe bağlı SDK iş yüklerine yerleştirilmiştir. Bu bileşenler arasında .NET MAUI ve Blazor WebAssembly AOT bulunur. Visual Studio kullanıyorsanız, ihtiyacınız olan SDK iş yüklerini yüklemeyle ilgilenir. .NET CLI kullanıyorsanız, yeni dotnet workload komutları kullanarak iş yüklerini yönetebilirsiniz:

Komut Açıklama
dotnet iş yükü araması Kullanılabilir iş yüklerini arar.
dotnet iş yükü yükleme Belirtilen iş yükünü yükler.
dotnet iş yükü kaldırma Belirtilen iş yükünü kaldırır.
dotnet iş yükü güncelleştirmesi yüklü iş yüklerini Güncelleştirmeler.
dotnet iş yükü onarımı Bozuk bir yüklemeyi onarmak için tüm yüklü iş yüklerini yeniden yükler.
dotnet iş yükü listesi Yüklü iş yüklerini listeler.

Daha fazla bilgi için bkz . İsteğe bağlı SDK iş yükleri.

System.Text.Json API'leri

.NET 6'da System.Text.Json artık bir "endüstriyel güç" serileştirme çözümü olacak şekilde birçok geliştirme yapılmıştır.

Kaynak oluşturucu

.NET 6 için System.Text.Jsonyeni bir kaynak oluşturucu ekler. Kaynak oluşturma ile JsonSerializer çalışır ve birden çok şekilde yapılandırılabilir. Performansı artırabilir, bellek kullanımını azaltabilir ve montaj kırpmayı kolaylaştırabilir. Daha fazla bilgi için bkz . How to choose reflection or source generation in System.Text.Json and How to use source generation in System.Text.Json.

Yazılabilir DOM

Önceden var olan salt okunur DOM'a ek olan yeni, yazılabilir belge nesne modeli (DOM) eklendi. Yeni API, düz eski CLR nesnesi (POCO) türlerinin kullanılmasının mümkün olmadığı durumlar için basit bir serileştirme alternatifi sağlar. Ayrıca büyük bir JSON ağacının alt bölümüne verimli bir şekilde gitmenize ve bir dizi okumanıza veya bu alt bölüme ait bir POCO'nun seri durumdan çıkarılmasına olanak tanır. Yazılabilir DOM'yi desteklemek için aşağıdaki yeni türler eklendi:

Daha fazla bilgi için bkz . JSON DOM seçenekleri.

IAsyncEnumerable serileştirme

System.Text.Json artık örneklerle IAsyncEnumerable<T> serileştirmeyi ve seri durumdan çıkarmayı destekliyor. Zaman uyumsuz serileştirme yöntemleri, bir nesne grafiğindeki tüm IAsyncEnumerable<T> örnekleri numaralandırır ve sonra bunları JSON dizileri olarak seri hale getirir. Seri durumdan çıkarma için yeni yöntem JsonSerializer.DeserializeAsyncEnumerable<TValue>(Stream, JsonSerializerOptions, CancellationToken) eklendi. Daha fazla bilgi için bkz . IAsyncEnumerable serileştirme.

Diğer yeni API'ler

Doğrulama ve varsayılan değerler için yeni serileştirme arabirimleri:

Daha fazla bilgi için bkz . Geri çağırmalar.

Yeni özellik sıralama özniteliği:

"Ham" JSON yazmak için yeni yöntem:

Akışa zaman uyumlu serileştirme ve seri durumdan çıkarma:

Serileştirme sırasında bir başvuru döngüsü algılandığında nesneyi yoksaymak için yeni seçenek:

ile System.Text.Jsonseri hale getirme ve seri durumdan çıkarma hakkında daha fazla bilgi için bkz . .NET'te JSON serileştirme ve seri durumdan çıkarma.

HTTP/3

.NET 6, HTTP'nin yeni bir sürümü olan HTTP/3 için önizleme desteği içerir. HTTP/3, QUIC adlı yeni bir temel bağlantı protokolü kullanarak mevcut bazı işlevsel ve performans zorluklarını çözer. QUIC, bağlantıları daha hızlı kurar ve bağlantılar IP adresinden bağımsızdır ve mobil istemcilerin Wi-fi ve hücresel ağlar arasında dolaşıma girmesine olanak tanır. Daha fazla bilgi için bkz . HttpClient ile HTTP/3 kullanma.

ASP.NET Core

ASP.NET Core, blazor WebAssembly uygulamaları ve tek sayfalı uygulamalar için minimum API'lerde, önceden (AOT) derlemesinde iyileştirmeler içerir. Ayrıca Blazor bileşenleri artık JavaScript'ten işlenebilir ve mevcut JavaScript tabanlı uygulamalarla tümleştirilebilir. Daha fazla bilgi için bkz . ASP.NET Core 6'daki yenilikler.

OpenTelemetry

.NET 6, yazılımlarınızın performansını ve davranışını analiz etmenize yardımcı olan araçlar, API'ler ve SDK'lardan oluşan bir koleksiyon olan OpenTelemetry için geliştirilmiş destek sağlar. Ad alanında api'ler System.Diagnostics.Metrics OpenTelemetry Metrics API belirtimini uygular. Örneğin, farklı ölçüm senaryolarını destekleyen dört araç sınıfı vardır. Araç sınıfları şunlardır:

Güvenlik

.NET 6, iki önemli güvenlik azaltması için önizleme desteği ekler: Denetim akışı Zorlama Teknolojisi (CET) ve "özel yürütme yazma" (W^X).

CET, bazı yeni Intel ve AMD işlemcilerde kullanılabilen bir Intel teknolojisidir. Donanıma bazı denetim akışı ele geçirme saldırılarına karşı koruma sağlayan özellikler ekler. .NET 6, Windows x64 uygulamaları için CET desteği sağlar ve bunu açıkça etkinleştirmeniz gerekir. Daha fazla bilgi için bkz . Intel CET gölge yığınlarıyla .NET 6 uyumluluğu.

W^X, .NET 6 yüklü tüm işletim sistemlerinde kullanılabilir ancak yalnızca Apple Silicon'da varsayılan olarak etkindir. W^X, bellek sayfalarının aynı anda yazılabilir ve yürütülebilir olmasını engelleyerek en basit saldırı yolunu engeller.

IL kırpma

Bağımsız dağıtımların kırpılması iyileştirildi. .NET 5'te yalnızca kullanılmayan derlemeler kırpıldı. .NET 6, kullanılmayan türlerin ve üyelerin kırpmasını da ekler. Ayrıca, kırpmanın çalışma zamanında kullanılan kodu kaldırabileceği yerler konusunda sizi uyaran kırpma uyarıları artık varsayılan olarak etkindir . Daha fazla bilgi için bkz . Bağımsız dağıtımları ve yürütülebilir dosyaları kırpma.

Kod analizi

.NET 6 SDK'sı API uyumluluğu, platform uyumluluğu, kırpma güvenliği, dize birleştirme ve bölmede span kullanımı, daha hızlı dize API'leri ve daha hızlı koleksiyon API'leri ile ilgili birkaç yeni kod çözümleyicisi içerir. Yeni (ve kaldırılan) çözümleyicilerin tam listesi için bkz . Çözümleyici sürümleri - .NET 6.

Özel platform korumaları

Platform uyumluluğu çözümleyicisi, sınıfındaki OperatingSystemIs<Platform> yöntemleri (örneğin, OperatingSystem.IsWindows()platform koruyucuları olarak) tanır. Özel platform korumalarına izin vermek için .NET 6, desteklenen veya desteklenmeyen bir platform adına sahip alanlara, özelliklere veya yöntemlere açıklama eklemek için kullanabileceğiniz iki yeni öznitelik ekler:

Windows Forms

Application.SetDefaultFont(Font) , .NET 6'da uygulamanız genelinde varsayılan yazı tipini ayarlayan yeni bir yöntemdir.

C# Windows Forms uygulamaları için şablonlar yönergeleri, dosya kapsamlı ad alanlarını ve null atanabilir başvuru türlerini destekleyecek global using şekilde güncelleştirildi. Buna ek olarak, ortak kodu azaltan ve Windows Forms tasarımcısının tasarım yüzeyini tercih edilen yazı tipinde işlemesini sağlayan uygulama önyükleme kodunu içerir. Bootstrap kodu, gibi Application.EnableVisualStyles()diğer yapılandırma yöntemlerine ApplicationConfiguration.Initialize()çağrılar yayan kaynak tarafından oluşturulan bir yöntem olan öğesine yapılan bir çağrıdır. Ayrıca, ApplicationDefaultFont MSBuild özelliği aracılığıyla varsayılan olmayan bir yazı tipi ayarlarsanız, ApplicationConfiguration.Initialize() öğesine SetDefaultFont(Font)bir çağrı yayar.

Daha fazla bilgi için Windows Forms'daki yenilikler blog gönderisine bakın.

Kaynak derleme

.NET SDK'sının tüm kaynağını içeren kaynak tarball artık .NET SDK derlemesinin bir ürünüdür. Red Hat gibi diğer kuruluşlar bu kaynak tarball'ı kullanarak SDK'nın kendi sürümünü oluşturabilir.

Hedef çerçeve takma adlar

.NET 6 için , ve net6.0-macosgibi net6.0-androidnet6.0-iosişletim sistemine özgü ek hedef çerçeve adları (TFM' ler) eklenmiştir. Daha fazla bilgi için bkz . .NET 5+ işletim sistemine özgü TFM'ler.

Genel matematik

Önizlemede, .NET 6'daki genel türlerde işleçleri kullanma özelliğidir. .NET 6, C# 10'un yeni önizleme özelliği static abstract olan arabirim üyelerinden yararlanan çok sayıda arabirim sunar. Bu arabirimler farklı işleçlere karşılık gelir, örneğin işlecini IAdditionOperators+ temsil eder. Arabirimler System.Runtime.Experimental NuGet paketinde kullanılabilir. Daha fazla bilgi için Genel matematik blog gönderisine bakın.

NuGet paket doğrulaması

NuGet kitaplık geliştiricisiyseniz, yeni paket doğrulama araçları paketlerinizin tutarlı ve iyi biçimlendirilmiş olduğunu doğrulamanızı sağlar. Aşağıdakilerin olup olmadığını belirleyebilirsiniz:

  • Paket sürümleri arasında hataya neden olan değişiklikler vardır.
  • Paket, çalışma zamanına özgü tüm uygulamalar için aynı genel API kümesine sahiptir.
  • Hedef çerçeve veya çalışma zamanı uygulanabilirliği için boşluklar vardır.

Daha fazla bilgi için Paket Doğrulama blog gönderisine bakın.

Düşünceler ion API'leri

.NET 6, kodu inceleyen ve null atanabilirlik bilgileri sağlayan aşağıdaki yeni API'leri sunar:

Bu API'ler yansıma tabanlı araçlar ve serileştiriciler için kullanışlıdır.

Microsoft.Extensions API'leri

Aşağıdaki tabloda gösterildiği gibi çeşitli uzantı ad alanlarının .NET 6'da geliştirmeleri vardır.

Ad Alanı İyileştirmeler
Microsoft.Extensions.DependencyInjection CreateAsyncScope , bir hizmeti kaydeden bir hizmet sağlayıcısı için bir deyimi güvenli bir şekilde kullanmanıza usingIAsyncDisposable olanak tanır.
Microsoft.Extensions.Hosting Yeni ConfigureHostOptions yöntemler uygulama kurulumunu basitleştirir.
Microsoft.Extensions.Logging Microsoft.Extensions.Logging , performans günlüğü API'leri için yeni bir kaynak oluşturucuya sahiptir. Yeni bir günlük yöntemine partial eklerseniz LoggerMessageAttribute kaynak oluşturucu tetikleniyor. Derleme zamanında, oluşturucu yönteminin partial uygulamasını oluşturur ve bu genellikle çalışma zamanında mevcut günlük çözümlerine göre daha hızlıdır. Daha fazla bilgi için bkz . Derleme zamanı günlüğü kaynak oluşturma.

Yeni LINQ API'leri

.NET 6'da çok sayıda LINQ yöntemi eklenmiştir. Aşağıdaki tabloda listelenen yeni yöntemlerin çoğunun türünde eşdeğer yöntemleri System.Linq.Queryable vardır.

Metot Açıklama
Enumerable.TryGetNonEnumeratedCount<TSource>(IEnumerable<TSource>, Int32) Bir numaralandırmayı zorlamadan bir dizideki öğe sayısını belirlemeye çalışır.
Enumerable.Chunk<TSource>(IEnumerable<TSource>, Int32) Bir dizinin öğelerini belirtilen boyuttaki öbeklere böler.
Enumerable.MaxBy ve Enumerable.MinBy Anahtar seçici kullanarak en büyük veya en az öğeyi bulur.
Enumerable.DistinctBy, Enumerable.ExceptBy, Enumerable.IntersectByve Enumerable.UnionBy Set tabanlı işlemler gerçekleştiren yöntemlerin bu yeni varyasyonları, anahtar seçici işlevini kullanarak eşitlik belirtmenize olanak tanır.
Enumerable.ElementAt<TSource>(IEnumerable<TSource>, Index) ve Enumerable.ElementAtOrDefault<TSource>(IEnumerable<TSource>, Index) Dizinin başından veya sonundan sayılan dizinleri kabul eder; örneğin, Enumerable.Range(1, 10).ElementAt(^2) döndürür 9.
Enumerable.FirstOrDefault<TSource>(IEnumerable<TSource>, TSource) ve Enumerable.FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)
Enumerable.LastOrDefault<TSource>(IEnumerable<TSource>, TSource) ve Enumerable.LastOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)
Enumerable.SingleOrDefault<TSource>(IEnumerable<TSource>, TSource) ve Enumerable.SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)
Yeni aşırı yüklemeler, dizi boşsa kullanılacak varsayılan bir değer belirtmenize olanak sağlar.
Enumerable.Max<TSource>(IEnumerable<TSource>, IComparer<TSource>) ve Enumerable.Min<TSource>(IEnumerable<TSource>, IComparer<TSource>) Yeni aşırı yüklemeler bir karşılaştırıcı belirtmenize olanak sağlar.
Enumerable.Take<TSource>(IEnumerable<TSource>, Range) Bir Range dizi dilimini almayı basitleştirmek için bir bağımsız değişken kabul eder; örneğin, yerine source.Take(7).Skip(2)kullanabilirsinizsource.Take(2..7).
Enumerable.Zip<TFirst,TSecond,TThird>(IEnumerable<TFirst>, IEnumerable<TSecond>, IEnumerable<TThird>) Belirtilen üç diziden öğeler içeren bir demet dizisi oluşturur.

Tarih, saat ve saat dilimi iyileştirmeleri

.NET 6'ya aşağıdaki iki yapı eklendi: System.DateOnly ve System.TimeOnly. Bunlar sırasıyla tarih bölümünü ve bir DateTimeöğesinin saat bölümünü temsil edin. DateOnly doğum günleri ve yıldönümleri TimeOnly için ve günlük alarmlar ve haftalık iş saatleri için yararlıdır.

Artık saat dilimi verilerinin yüklü olduğu herhangi bir işletim sisteminde İnternet Tarafından Atanan Numaralar Yetkilisi (IANA) veya Windows saat dilimi kimliklerini kullanabilirsiniz. yöntemi, TimeZoneInfo.FindSystemTimeZoneById(String) istenen saat dilimi sistemde bulunamazsa, girişlerini otomatik olarak bir Windows saat diliminden IANA saat dilimine (veya tam tersi) dönüştürecek şekilde güncelleştirildi. Buna ek olarak, yeni yöntemler TryConvertIanaIdToWindowsId(String, String) ve TryConvertWindowsIdToIanaId hala bir saat dilimi biçiminden diğerine el ile dönüştürmeniz gerektiğinde senaryolar için eklenmiştir.

Birkaç saat dilimi iyileştirmesi daha vardır. Daha fazla bilgi için bkz . .NET 6'da Tarih, Saat ve Saat Dilimi Geliştirmeleri.

PriorityQueue sınıfı

Yeni PriorityQueue<TElement,TPriority> sınıf, hem değer hem de önceliğe sahip öğe koleksiyonunu temsil eder. Öğeler artan öncelik sırasına göre sıralanır; yani önce en düşük öncelik değerine sahip öğe sıralanır. Bu sınıf en düşük yığın veri yapısını uygular.

Ayrıca bkz.