.NET 7'deki yenilikler

.NET 7, .NET 6'nın ardılıdır ve birleşik, modern, basit ve hızlı olmaya odaklanır. .NET 7, standart vadeli destek (STS) sürümü (eski adıyla geçerli sürüm) olarak 18 ay boyunca desteklenecektir.

Bu makalede .NET 7'nin yeni özellikleri listelenir ve her biri hakkında daha ayrıntılı bilgilerin bağlantıları sağlanır.

.NET 7 için güncelleştirilmiş tüm .NET makalelerini bulmak için bkz . .NET belgeleri: .NET 7 sürümüne yönelik yenilikler.

Performans

Performans, .NET 7'nin önemli bir odağıdır ve tüm özellikleri performans göz önünde bulundurularak tasarlanmıştır. Buna ek olarak, .NET 7 yalnızca performansa yönelik aşağıdaki geliştirmeleri içerir:

  • Yığın üzerinde değiştirme (OSR), katmanlı derlemenin tamamlayıcısıdır. Çalışma zamanının yürütmesinin ortasında çalışmakta olan bir yöntem tarafından yürütülen kodu değiştirmesine olanak tanır (başka bir ifadeyle "yığında" olur). Uzun süre çalışan yöntemler, yürütmenin ortasında daha iyileştirilmiş sürümlere geçebilir.
  • Profil destekli iyileştirme (PGO) artık OSR ile çalışır ve etkinleştirilmesi daha kolaydır (proje dosyanıza ekleyerek <TieredPGO>true</TieredPGO> ). PGO ayrıca temsilciler gibi ek öğeleri de izleyebilir ve iyileştirebilir.
  • Arm64 için geliştirilmiş kod oluşturma.
  • Yerel AOT , dış bağımlılık olmadan hedef platformun dosya biçiminde tek başına bir yürütülebilir dosya oluşturur. Il veya JIT olmadan tamamen yereldir ve hızlı başlangıç süresi ve küçük, bağımsız dağıtım sağlar. .NET 7'de Yerel AOT, konsol uygulamalarına odaklanır ve uygulamaların kırpılması gerekir.
  • Blazor WebAssembly, Android ve iOS uygulamalarını destekleyen Mono çalışma zamanında performans geliştirmeleri.

.NET 7'yi bu kadar hızlı hale getiren performans odaklı özelliklerin birçoğuna ayrıntılı bir bakış için .NET 7'deki performans iyileştirmeleri blog gönderisine bakın.

System.Text.Json serileştirmesi

.NET 7, aşağıdaki alanlarda System.Text.Json serileştirmesine yönelik iyileştirmeler içerir:

  • Sözleşme özelleştirmesi , türlerin nasıl seri hale getirildiği ve seri durumdan çıkarıldığı üzerinde daha fazla denetim sağlar. Daha fazla bilgi için bkz . JSON sözleşmesini özelleştirme.
  • Kullanıcı tanımlı tür hiyerarşileri için polimorfik serileştirme . Daha fazla bilgi için bkz . Türetilmiş sınıfların özelliklerini seri hale getirme.
  • Seri durumdan çıkarmanın başarılı olması için JSON yükünde bulunması gereken özellikler olan gerekli üyeler için destek. Daha fazla bilgi için bkz . Gerekli özellikler.

Bu güncelleştirmeler ve diğer güncelleştirmeler hakkında bilgi için .NET 7'de System.Text.Json'daki yenilikler blog gönderisine bakın.

Genel matematik

.NET 7 ve C# 11, üzerinde çalıştığınız türü tam olarak bilmenize gerek kalmadan matematiksel işlemleri genel olarak gerçekleştirmenize olanak sağlayan yenilikler içerir. Örneğin, iki sayı ekleyen bir yöntem yazmak istiyorsanız, daha önce her tür için yöntemin aşırı yüklemesini eklemeniz gerekiyordu. Artık tür parametresinin sayı benzeri bir tür olarak kısıtlandığı tek bir genel yöntem yazabilirsiniz. Daha fazla bilgi için Genel matematik makalesine ve Genel matematik blog gönderisine bakın.

Normal ifadeler

. NET'in normal ifade kitaplığı .NET 7'de önemli işlevsel ve performans geliştirmeleri görmüştür:

  • Yeni seçenek RegexOptions.NonBacktracking , geri izlemeyi önleyen bir yaklaşım kullanarak eşleştirmeyi etkinleştirir ve girişin uzunluğunda doğrusal zaman işlemeyi garanti eder. Geri izleme altyapısı sağdan sola aramada kullanılamaz ve birkaç kısıtlama daha vardır, ancak tüm normal ifadeler ve girişler için hızlıdır. Daha fazla bilgi için bkz . Geri izleme modu.

  • Normal ifade kaynak oluşturucuları yeni. Kaynak oluşturucular, derleme zamanında deseniniz için iyileştirilmiş bir altyapı oluşturarak aktarım hızı performans avantajları sağlar. Yayılan kaynak projenizin bir parçasıdır, böylece bunu görüntüleyebilir ve hatalarını ayıklayabilirsiniz. Ayrıca, yeni bir kaynak oluşturucu tanılaması SYSLIB1045 , kullandığınız Regex ve kaynak oluşturucuya dönüştürülebilecek yerler konusunda sizi uyarır. Daha fazla bilgi için bkz . .NET normal ifade kaynak oluşturucuları.

  • Büyük/küçük harfe duyarlı olmayan aramalar için .NET 7, büyük performans kazanımları içerir. Kazançlar, artık belirtilmesi RegexOptions.IgnoreCase desendeki her karakterde ve girişteki her karakterde çağrı ToLower yapılmadığından gelir. Bunun yerine, büyük/küçük harfle ilgili tüm çalışmalar oluşturulurken Regex yapılır.

  • Regex artık bazı API'ler için spans'i destekliyor. Bu desteğin bir parçası olarak aşağıdaki yeni yöntemler eklenmiştir:

Bunlar ve diğer geliştirmeler hakkında daha fazla bilgi için .NET 7'de normal ifade iyileştirmeleri blog gönderisine bakın.

.NET kitaplıkları

.NET kitaplık API'leri için birçok geliştirme yapılmıştır. Bazıları bu makalenin diğer ayrılmış bölümlerinde belirtilmiştir. Bazıları aşağıdaki tabloda özetlenir.

Açıklama API'ler Daha fazla bilgi
, TimeOnly, DateTimeve DateTimeOffset türlerinde TimeSpanmikrosaniye ve nanosaniye desteği - DateTime.Microsecond
- DateTime.Nanosecond
- DateTime.AddMicroseconds(Double)
- Yeni DateTime oluşturucu aşırı yüklemeleri

- DateTimeOffset.Microsecond
- DateTimeOffset.Nanosecond
- DateTimeOffset.AddMicroseconds(Double)
- Yeni DateTimeOffset oluşturucu aşırı yüklemeleri

- TimeOnly.Microsecond
- TimeOnly.Nanosecond

- TimeSpan.Microseconds
- TimeSpan.Nanoseconds
- TimeSpan.FromMicroseconds(Double)
- Ve diğerleri...
Bu API'ler, mikrosaniye ve nanosaniye değerlerini belirlemek için artık "değer" değeri üzerinde hesaplama yapmanız gerekmediğini gösterir. Daha fazla bilgi için .NET 7 Preview 4 blog gönderisine bakın.
Tar arşivlerini okumak, yazmak, arşivleme ve ayıklamak için API'ler System.Formats.Tar Daha fazla bilgi için bkz . .NET 7 Preview 4 ve .NET 7 Preview 6 blog gönderileri.
Trafiği güvenli bir düzeyde tutarak kaynağı korumak için API'leri sınırlama oranı RateLimiter ve System.Threading.RateLimiting NuGet paketindeki diğerleri Daha fazla bilgi için bkz. .NET'te HTTP işleyicisini hız sınırlama ve .NET için hız sınırlama duyuruları.
Bir api'den tüm verileri okumak içinStream - Stream.ReadExactly
- Stream.ReadAtLeast
Stream.Read akıştaki kullanılabilir verilerden daha az veri döndürebilir. Yeni ReadExactly yöntemler tam olarak istenen bayt sayısını okur ve yeni ReadAtLeast yöntemler en az istenen bayt sayısını okur. Daha fazla bilgi için .NET 7 Preview 5 blog gönderisine bakın.
, , TimeOnly, Int128UInt128ve için DateOnlyyeni tür dönüştürücüleriHalf Ad alanında System.ComponentModel :

- DateOnlyConverter
- TimeOnlyConverter
- Int128Converter
- UInt128Converter
- HalfConverter
Tür dönüştürücüleri genellikle değer türlerini bir dizeye ve dizeden dönüştürmek için kullanılır. Bu yeni API'ler, daha yakın zamanda eklenen türler için tür dönüştürücüleri ekler.
için ölçüm desteği IMemoryCache - MemoryCacheStatistics
- MemoryCache.GetCurrentStatistics()
GetCurrentStatistics() bir veya daha fazla bellek önbelleğinin istatistiklerini izlemek için olay sayaçlarını veya ölçüm API'lerini kullanmanıza olanak tanır. Daha fazla bilgi için .NET 7 Preview 4 blog gönderisine bakın.
Unix dosya izinlerini almak ve ayarlamak için API'ler - System.IO.UnixFileMode Enum
- File.GetUnixFileMode
- File.SetUnixFileMode
- FileSystemInfo.UnixFileMode
- Directory.CreateDirectory(String, UnixFileMode)
- FileStreamOptions.UnixCreateMode
Daha fazla bilgi için .NET 7 Preview 7 blog gönderisine bakın.
Dizede ne tür bir söz diziminin beklendiğini belirten öznitelik StringSyntaxAttribute Örneğin, parametresini ile [StringSyntax(StringSyntaxAttribute.Regex)]attribut ederek bir string parametrenin normal ifade beklediğini belirtebilirsiniz.
Tarayıcıda veya diğer WebAssembly mimarilerinde çalışırken JavaScript ile birlikte çalışmak için API'ler System.Runtime.InteropServices.JavaScript JavaScript uygulamaları, JavaScript'teki .NET kitaplıklarını yeniden kullanmak için .NET 7'deki genişletilmiş WebAssembly desteğini kullanabilir. Daha fazla bilgi için bkz . .NET 7'de herhangi bir JavaScript uygulamasından .NET kullanma.

Gözlemlenebilirlik

.NET 7, gözlemlenebilirlik konusunda geliştirmeler yapar. Gözlemlenebilirlik, uygulamanızın ölçeklendirildikçe ve teknik karmaşıklık arttıkça durumunu anlamanıza yardımcı olur. . NET'in gözlemlenebilirlik uygulaması öncelikli olarak OpenTelemetry çevresinde oluşturulur. Geliştirmeler arasında şunlar yer alıyor:

Daha fazla bilgi için .NET 7 Preview 4 blog gönderisine bakın.

.NET SDK

.NET 7 SDK'sı CLI şablon deneyimini geliştirir. Ayrıca kapsayıcılara yayımlamayı ve NuGet ile merkezi paket yönetimini etkinleştirir.

Şablonlar

komutunda ve şablon yazmada dotnet new bazı hoş geldiniz geliştirmeleri yapılmıştır.

dotnet new

Şablona dotnet new dayalı olarak yeni bir proje, yapılandırma dosyası veya çözüm oluşturan CLI komutu artık aşağıdakileri keşfetmek için sekme tamamlamayı destekliyor:

  • Kullanılabilir şablon adları
  • Şablon seçenekleri
  • İzin verilebilen seçenek değerleri

Buna ek olarak, daha iyi uyumluluk için , installuninstall, search, listve update alt komutları artık ön eke -- sahip değildir.

Yazma

.NET 7 için yeni bir kavram olan şablon kısıtlamaları, şablonlarınıza izin verilen bağlamı tanımlamanıza olanak sağlar. Kısıtlamalar, şablon altyapısının gibi dotnet new listkomutlarda hangi şablonları göstermesi gerektiğini belirlemesine yardımcı olur. Şablonunuzu bir işletim sistemi, şablon altyapısı konağı (örneğin, Visual Studio'daki .NET CLI veya Yeni Proje iletişim kutusu) ve yüklü bir iş yüküyle kısıtlayabilirsiniz. Kısıtlamaları şablonunuzun yapılandırma dosyasında tanımlarsınız.

Ayrıca şablon yapılandırma dosyasında artık birden çok değere izin vermek için bir şablon parametresine açıklama ekleyebilirsiniz. Örneğin, web şablon birden çok kimlik doğrulaması biçimine izin verir.

Daha fazla bilgi için .NET 7 Preview 6 blog gönderisine bakın.

Kapsayıcıya yayımlama

Kapsayıcılar, bulutta çok çeşitli uygulamaları ve hizmetleri dağıtmanın ve çalıştırmanın en kolay yollarından biridir. Kapsayıcı görüntüleri artık .NET SDK'sının desteklenen bir çıkış türüdür ve kullanarak dotnet publishuygulamalarınızın kapsayıcılı sürümlerini oluşturabilirsiniz. Özellik hakkında daha fazla bilgi için bkz . .NET SDK için yerleşik kapsayıcı desteği duyuruları. Öğretici için bkz . Dotnet publish ile bir .NET uygulamasını kapsayıcıya alma.

Merkezi paket yönetimi

Artık NuGet'in merkezi paket yönetimi (CPM) özelliğini kullanarak projelerinizdeki ortak bağımlılıkları tek bir konumdan yönetebilirsiniz. Bunu etkinleştirmek için, deponuzun köküne bir Directory.Packages.props dosyası eklersiniz. Bu dosyada, MSBuild özelliğini ManagePackageVersionsCentrally olarak true ayarlayın ve öğeleri kullanarak PackageVersion ortak paket bağımlılığı için sürümler ekleyin. Ardından, tek tek proje dosyalarında, merkezi olarak yönetilen paketlere başvuran tüm PackageReference öğelerindeki öznitelikleri atlayabilirsinizVersion.

Daha fazla bilgi için bkz . Merkezi paket yönetimi.

P/Kaynak oluşturmayı çağır

.NET 7, C# dilinde platform çağrıları (P/Invokes) için bir kaynak oluşturucu sunar. Kaynak oluşturucu LibraryImportAttributestaticpartial, derleme zamanı kaynak oluşturmasını tetikleme yöntemleri için üzerinde arar. Derleme zamanında marshalling kodu oluşturularak, kullanırken DllImportAttributeolduğu gibi çalışma zamanında hiçbir IL saplaması oluşturulması gerekmez. Kaynak oluşturucu, uygulama performansını artırır ve ayrıca uygulamanın önceden derlenmiş (AOT) olmasını sağlar. Daha fazla bilgi için bkz . Platform çağrıları için kaynak oluşturma ve Kaynak tarafından oluşturulan P/Invoke'larda özel marshallers kullanma.

Bu bölüm, .NET 7 sürümüyle eşleşen sürümleri olan ilgili ürünler hakkında bilgi içerir.

Visual Studio 2022 sürüm 17.4

Daha fazla bilgi için bkz . Visual Studio 2022'deki yenilikler.

C# 11

C# 11 genel matematik, ham dize değişmez değerleri, dosya kapsamlı türler ve diğer yeni özellikler için destek içerir. Daha fazla bilgi için bkz . C# 11'deki yenilikler.

F# 7

F# 7, dili daha basit hale getirme ve performansı geliştirme ve yeni C# özellikleriyle birlikte çalışma yolculuğuna devam eder. Daha fazla bilgi için bkz . F# 7 Duyuruları.

.NET MAUI

.NET Çok platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI), C# ve XAML ile yerel mobil ve masaüstü uygulamaları oluşturmaya yönelik platformlar arası bir çerçevedir. Android, iOS, macOS ve Windows API'lerini tek bir API'de birleştirir. En son güncelleştirmeler hakkında bilgi için bkz . .NET 7 için .NET MAUI'deki yenilikler.

ASP.NET Core

ASP.NET Core 7.0 hız sınırlama ara yazılımını, minimum API'lerde yapılan iyileştirmeleri ve gRPC JSON kodlamasını içerir. Tüm güncelleştirmeler hakkında bilgi için bkz . ASP.NET Core 7'deki yenilikler.

EF Core

Entity Framework Core 7.0 JSON sütunları için sağlayıcıdan bağımsız destek, değişiklikleri kaydetmek için geliştirilmiş performans ve özel tersine mühendislik şablonları içerir. Tüm güncelleştirmeler hakkında bilgi için bkz . EF Core 7.0'daki yenilikler.

Windows Forms

.NET 7 için Windows Forms'a çok fazla iş eklendi. Aşağıdaki alanlarda iyileştirmeler yapılmıştır:

  • Erişilebilirlik
  • Yüksek DPI ve ölçeklendirme
  • Veri Bağlama

Daha fazla bilgi için bkz . .NET 7'de Windows Forms'taki yenilikler.

WPF

.NET 7'deki WPF, performans ve erişilebilirlik geliştirmelerinin yanı sıra çok sayıda hata düzeltmesi içerir. Daha fazla bilgi için .NET 7'de WPF'deki yenilikler blog gönderisine bakın.

Orleans

Orleans güçlü, ölçeklenebilir dağıtılmış uygulamalar oluşturmaya yönelik platformlar arası bir çerçevedir. için en son güncelleştirmeler hakkında bilgi için Orleansbkz . 3.x'ten Orleans 7.0'a geçiş.

.NET Yükseltme Yardımcısı ve CoreWCF

.NET Yükseltme Yardımcısı artık sunucu tarafı WCF uygulamalarını CoreWCF'ye yükseltmeyi destekliyor. Bu, WCF'nin topluluk tarafından oluşturulan bir bağlantı noktası olan .NET'e (Core) yükseltiliyor. Daha fazla bilgi için bkz . WCF sunucu tarafı projesini CoreWCF kullanacak şekilde yükseltme.

ML.NET

ML.NET artık en son son derin öğrenme tekniklerini kullanarak özel metin sınıflandırma modellerini eğitmeye olanak sağlayan bir metin sınıflandırma API'sini içeriyor. Daha fazla bilgi için AutoML ve araçlarıyla ilgili yenilikler ve ML.NET Metin Sınıflandırma API'sine Giriş blog gönderilerine bakın.

Ayrıca bkz.