Aracılığıyla paylaş


.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, 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.

Performance

.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.

FileStream

Windows'ta System.IO.FileStream daha iyi performans ve güvenilirlik sağlamak amacıyla .NET 6 için tür yeniden yazıldı. Artık FileStream Windows'ta zaman uyumsuz I/O için oluşturulduğunda hiç engellemez. 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, sıfırıncı katman sırasında eklenen ek enstrümantasyona dayalı olarak kodu daha da optimize etmek için katmanlı derleme süreciyle birlikte çalışır. Dinamik PGO varsayılan olarak devre dışıdır, ancak DOTNET_TieredPGO etkinleş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.

Anında 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. Anında yeniden yükleme, Visual Studio 2022 ve dotnet watch komut satırı aracında kullanılabilir. Anında 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 Hot reload blog yazısını bakın.

.NET MAUI

.NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) hâlâ önizleme aşamasındadır, 2022'nin ilk çeyreğinde yayın adayı ve 2022'nin ikinci çeyreğinde genel kullanılabilirlik (GA) ile piyasaya sürülecektir. .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 Multi-platform App UI güncellemesiyle ilgili blog gönderisine bakın.

C# 10 ve şablonlar

C# 10, global using yönergeleri, dosya kapsamlı ad alanı bildirimleri ve kayıt yapıları (structs) gibi yenilikleri içerir. Daha fazla bilgi için bkz. C# Dili sürüm geçmişi.

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

  • async Main yöntemi
  • Üst düzey ifadeler
  • Hedef türü belirtilmiş yeni ifadeler
  • Örtük global using talimatlar
  • Dosya düzeyinde ad alanları
  • Boş değer atanabilir referans 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:

Command Description
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üklenen iş yüklerini güncelleştirir.
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 yeni bir System.Text.Json ekler. JsonSerializer ile kaynak oluşturma çalışır ve çeşitli şekillerde yapılandırılabilir. Performansı artırabilir, bellek kullanımını azaltabilir ve derleme kesmeyi kolaylaştırabilir. Daha fazla bilgi için bkz System.Text.Json'da yansıma veya kaynak üretimini nasıl seçersiniz? ve System.Text.Json'da kaynak üretimini nasıl kullanacağınızı öğrenin.

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 IAsyncEnumerable<T> örnekleriyle serileştirme ve seri durumdan çıkarma işlemlerini 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 IAsyncEnumerable serileştirime konusuna bakınız.

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 Çekirdeği

ASP.NET Core, minimal API'lerde, Blazor WebAssembly uygulamaları için anında derleme (AOT) ve tek sayfalı uygulamalarda 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. Namespace'teki API'ler, System.Diagnostics.MetricsOpenTelemetry 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:

Security

.NET 6, iki önemli güvenlik önlemi için önizleme desteği ekler: Kontrol 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 temizlenmesini de 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 Is<Platform>OperatingSystem 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, global using yönergeleri, dosya kapsamlı ad alanları ve null atanabilir başvuru türlerini destekleyecek şekilde güncellendi. Ayrıca, boilerplate 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 da içerir. Ön yükleme kodu, diğer yapılandırma yöntemlerine, örneğin ApplicationConfiguration.Initialize(), çağrılar yayan kaynak tarafından oluşturulan bir yöntem olan Application.EnableVisualStyles() öğ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 işletim sistemine özgü ek hedef çerçeve adları (TFM'ler) eklenmiştir, örneğin net6.0-android, net6.0-ios ve net6.0-macos. Daha fazla bilgi için bkz. İşletim sistemine özgü TFM'ler.

Genel matematik

Önizlemede, .NET 6'da genel türlerde işleçleri kullanabilme özelliği yer alıyor. .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 IAdditionOperators+ işlecini 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 uyumsuzluk yaratan değişiklikler vardır.
  • Paket, çalışma zamanına özgü tüm uygulamalar için aynı genel API kümesine sahiptir.
  • Hedef platform veya çalışma zamanı uygulanabilirliği ile ilgili boşluklar vardır.

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

Yansıma 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.

Namespace İyileştirmeler
Microsoft.Extensions.DependencyInjection CreateAsyncScope, bir using hizmetini kaydeden bir hizmet sağlayıcısı için bir IAsyncDisposable ifadesini güvenli bir şekilde kullanmanıza 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. Bir LoggerMessageAttribute günlük yöntemine yeni partial eklediğinizde kaynak oluşturucu tetiklenir. Derleme zamanında oluşturucu, partial metodunun uygulamasını oluşturur ve bu, genellikle çalışma zamanında mevcut günlük çözümlerinden daha hızlıdır. Daha fazla bilgi için Derleme zamanında günlük kaynağı oluşturma bölümüne bakın.

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 System.Linq.Queryable türünde eşdeğer yöntemleri vardır.

Yöntem Description
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.IntersectBy ve 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 bağımsız değişkeni kabul eder ve bu sayede bir dizi dilimini almayı basitleştirir; örneğin, source.Take(2..7) yerine source.Take(7).Skip(2) kullanabilirsiniz.
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, bir saat dilimi biçiminden diğerine manuel dönüştürme gerektiren senaryolar için yeni yöntemler TryConvertIanaIdToWindowsId(String, String) ve TryConvertWindowsIdToIanaId eklenmiştir.

Diğer saat dilimi iyileştirmeleri de bulunmaktadı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 bakınız