Maglup
Co-Admin
.NET 10.0 Önizleme 3 Tür Uzantı Kapısı
.NET 10.0 Önizleme 3, dünden beri .net indirme sayfasında indirilebilir. Bir geliştirme ortamı olarak, daha önce olduğu gibi Visual Studio 17.14 Önizleme 2.0'a ihtiyacınız var. Dün güncellenmedi, yani Visual Studio'daki .NET 10.0 önizleme 3'ün yeni özellikleri henüz tercüme edilmedi, çünkü Visual Studio bunları yalnızca C#dilinin özelliğine dayanan bir önizleme 3.0 olarak bilecektir. Visual Studio kodunu değiştirirken ve komut satırının sırasına göre tercüme ederken dotnet build Ancak, yeni özellikler zaten çalışıyor.

Holger Schwichtenberg, Maximago yazılımının geliştirilmesinde baş teknoloji uzmanıdır. Www.it- visionions.de'deki uzman ekibi ile Microsoft, Java ve Web Teknikleri alanında ayrıca tavsiye ve eğitim sunmaktadır. Uzman konferanslarda dersler tutar ve çok sayıda uzman kitabın yazarıdır.

Kurulum programı .NET 10.0 önizleme 3 SDK bileşenlerini gösterir (Şekil 1).
(Resim: Ekran görüntüsü (Holger Schwichtenberg))
C# 14.0'da uzatma blokları
Sınıfların daha sonraki genişlemesi, zaten başka bir yerde derlenmiş olmalarına rağmen (örneğin, .NET sınıflarının kitapçılarında Microsoft tarafından verilen sınıflarda), C#sürüm 3.0 dilinden “Uzatma Yöntemleri” adıyla başka yöntemler vardır. Bu, 2007'de .NET Framework 3.5 ile birlikte ortaya çıktı. Ancak, yalnızca uygulama yöntemleri ekleyebilirsiniz. Bu nedenle, adından yeterli olan yapıları ve yöntemlere göre görmek zorunda kaldılar. IsEmptyClassic() Liste 1'de:
public static class StringExtensionClassic
{
public static string TruncateClassic(this string s, int count)
{
if (s == null) return "";
if (s.Length <= count) return s;
return s.Substring(0, count) + "...";
}
public static bool IsEmptyClassic(this string s)
=> String.IsNullOrEmpty(s);
}
Liste 1: Klasik Uzatma Yöntemleri
C# 14.0'da şimdi blokun yeni anahtar kelimesi var extension Mevcut .NET sınıflarını genişletme olasılığı. Anahtar kelime extension Daha yüksek seviyede statik ve genel olmayan bir sınıfın bir parçası olmalıdır (yani iç içe sınıf yok). Anahtar kelimeye göre extension Türün genişlemesini beyan ederseniz, sınıfın 2. alıntısında System.String (Alternatif olarak, üretilen türden kısaltılır string). Bu nedenle, burada belirtilen türleri genişletir. Aşağıdaki yapılar şu anda bu uzantı bloklarında kullanılabilir (bkz. Liste 2):
- Uygulama yöntemleri
- Statik yöntemler
- Getter ile örnek özelliği
- Bir alıcı ile statik özellikler
OrderedDictionary<string, string> websites = new OrderedDictionary<string, string>();
websites.Add("Haberler", "Haber");
websites.Add("Microsoft", "www.Microsoft.com");
websites.Add("IT-Visions", "www.IT-Visions.de");
var propertyName = "IT-Visions";
var value = "www.IT-Visions.de";
// bisher
if (!websites.TryAdd(propertyName, value))
{
int index1 = websites.IndexOf(propertyName); // Second lookup operation
CUI.Warning("Element " + value + " ist bereits vorhanden!");
}
// neu
if (!websites.TryAdd(propertyName, value, out int index))
{
CUI.Warning("Element " + value +
" ist bereits vorhanden an der Position " +
index + """!""");
}
// neu
if (websites.TryGetValue(propertyName, out string? value2, out int index2))
{
CUI.Success($"Element {value2} wurde gefunden an der Position {index2}.");
}
Liste 2: C# 14.0 ile System.string için Uzatma
Liste 3, eski ve yeni uzantıların çağrısını gösterir. Geliştiriciler artık genişletme yöntemleri için eski veya yeni sözdizimini kullanmayı seçebilir. Visual Studio, iki sözdizimi formu arasında dönüşüm için yeniden düzenleme yöntemleri sunacaktır. Buna ek olarak, Microsoft, üreticiler gibi bir sonraki önizleme sürümlerinde uzatma bloklarında daha fazla yapıya izin vermeyi planlıyor. Microsoft'un C# 13.0 için devam ettiği uzantılar için sözdizimi (public implicit extension Name for Typ) reddedildi.
public class StringExtensionDemo
{
public void Run()
{
string s1old = "Hello World";
string s1oldtruncated = s1old.TruncateClassic(5);
Console.WriteLine(s1oldtruncated); // Hello...
string s2old = null;
Console.WriteLine(s2old.IsEmptyClassic()); // true
string s1 = "Hello World";
string s1truncated = s1.Truncate(5);
Console.WriteLine(s1truncated); // Hello...
string s2 = null;
Console.WriteLine(s2.IsEmpty); // true
string s3 = string.Create(5, '#');
Console.WriteLine(s3); // "#####"
}
}
Liste 3: Liste 1 ve 2'deki uzantıları arayın
C# 14.0
C# 14.0'da çok yararlı bir başka yeni vokal yapısı Microsoft null koşullu atamadan bahsediyor. Bu, geliştiricilerin nesnenin olup olmadığını kontrol etmeden bir mülke atama yapmalarını sağlar. null VE. Yerine
Website aktuelleDOTNETWebsite = Website.Load(123);
if (aktuelleDOTNETWebsite!= null)
{
// Aktualisieren der URL
aktuelleDOTNETWebsite.Url = "https://www.dotnet10.de";
}
Şimdi soru işaretiyle kısaltılmış yazabilirsiniz:
aktuelleDOTNETWebsite?.Url = "https://www.dotnet10.de";
Bu sonunda bir hataya yol açmaz. Ancak, değişken ise hiçbir şey olmaz aktuelleDOTNETWebsite değer null mal sahibi.
Openapi Spesifikasyonları için İyileştirmeler (OAS)
“ASP.NET Core Web API (Native AOT)” proje modelinde, Openapi Spesifikasyonu (OAS) ile meta verilerin üretimi artık standart olarak etkinleştirilmiştir. Komutla
dotnet new webapiaot --name ITVisionsWebAPI
Nuget microsoft.aspnetcore anlamına gelen bir proje var
builder.Services.AddOpenApi();
VE
app.MapOpenApi();
etkinleştirildi.
Şimdiye kadar, Openapi desteği sadece Nativeaot derleyicisi ile derlemeye izin vermeyen “Webapi” proje modelinde aktifti. “WebPiaot” proje modelinde, geliştiriciler parametreyle Openapi özelliklerini de devre dışı bırakabilir. --no-openapi:
dotnet new webapiaot --name ITVisionsWebAPI --no-openapi
Önizleme 2'de WebAPI projelerinin her zaman 404 hatası sağladığı sorun, önizleme 3.'de çözüldü. XML Yorumları <summary>,, <remark> VE <param>önizleme 2 göründüğü için Openapi belgesine aktarılabilir summary VE description.
ASP.NET Core minimal webapis için doğrulama
ASP.NET Core Minimal Webapis artık parametrelerin veri notlarıyla doğrulanmasına da hakimdir. Şimdiye kadar, sadece denetleyiciye dayanan Webapis bunu yapabildi.
Webapis minima için, geliştiricilerin yalnızca proje dosyasındaki doğrulama işlevini etkinleştirmesi gerekir
<PropertyGroup>
<!-- Enable the generation of interceptors for the validation attributes -->
<InterceptorsNamespaces>$(InterceptorsNamespaces);Microsoft.AspNetCore.Http.Validation.Generated</InterceptorsNamespaces>
</PropertyGroup>
Başlangıç dosyasında olduğu gibi:
builder.Services.AddValidation();
Böylece iyi bilinen doğrulamanın ek açıklamalarını kullanabilirsiniz. [MinLength],, [MaxLength],, [Range],, ,, [EmailAddress],, [Phone],, [CreditCard],, [RegularExpression] Ve diğer birçok (bkz. Microsoft Learn) Webapis Minima'da da çalışır: Örneğin: app.MapGet("/checkwebsite", ([MinLength(5)] string name, [Url] string url) => WebsiteChecker.CheckWebsite(name, url)); İşte HTTP çağrısı http://localhost:5245/checkwebsite?name=ITVisions&url=www.IT-Visions.de İki doğrulama hatası olan bir JSON belgesinin iade edilmesi için yürütme aşamasında (bkz. Şekil 2). [IMG alt="Bu Webapi Minimum ASP.NET olarak adlandırıldığında her iki parametre doğrulama kurallarına karşılık gelmedi (Şekil 2)"]https://Haberler.cloudimg.io/width/696/q50.png-lossy-50.webp-lossy-50.foil1/_Haber_/imgs/18/4/8/3/6/1/3/4/image2-22898726e5a93072.png[/IMG] Bu Webapi Minimum ASP.NET olarak adlandırıldığında her iki parametre doğrulama kurallarına karşılık gelmedi (Şekil 2). (Resim: Holger Schwichtenberg) [SIZE=4][B]Blazor 10.0'da kalıcı beyan bileşen durumu[/B][/SIZE] Microsoft ASP.NET Core ve Blazor Server ve Blazor Webassembly WebFramework, HTML belgelerindeki JSON-Angent aracılığıyla taklit ve ana otuz arasındaki verilere zaten teslim edildi. Şimdiye kadar, bu kalıcı bileşen, gerçekleştirmedeki geliştiriciler için oldukça karmaşıktı, çünkü bağımlılık enjeksiyonu yoluyla bir nesne elde etmeniz gerekiyordu. @inject PersistentComponentState ApplicationState Ve sonra durumu oraya bir nesne olarak koy private PersistingComponentStateSubscription? persistingSubscription; persistingSubscription = ApplicationState.RegisterOnPersisting(() => { ApplicationState.PersistAsJson("name", daten); return Task.CompletedTask; }); Ve açıkça tekrar dışarı çık if (ApplicationState.TryTakeFromJson<Typ>("name", out var daten)) { Daten = daten; } Microsoft In .NET 10.0 Önizleme 3, kalıcı beyan bileşeninin durumu ile bunu radikal bir şekilde basitleştirdi. Geliştiriciler artık sadece ek açıklama ile bir mülk olmalı [SupplyParameterFromPersistentComponentState] Sağlanan ve başka bir şey için endişelenmeyin: [SupplyParameterFromPersistentComponentState] public Daten? daten { get; set; } [SIZE=4][B]Webassembly Blazor için İyileştirmeler[/B][/SIZE] Blazor 9.0'da tanıtılan dijital baskı, şimdi ASP.NET Core'da yönetilmeyen, ancak statik bir web sunucusunda barındırılabilen SO -Blazor'da entegre edilmiş JavaScript dosyası için de çalışıyor. Bunu yapmak için proje ayarlarında kullanın <WriteImportMapToHtml>true</WriteImportMapToHtml> ve HTML kafa bölgesinde <script type="importmap"></script> Senaryo günü o zaman <script src="_framework/blazor.webassembly#[.{fingerprint}].js"></script> Bu iyileştirme, yeni bir proje oluşturduğunuzda gördüğünüz proje modelinde henüz uygulanmamıştır: dotnet new blazorwasm -n ITVisionsDemo Webassembly Blazor için, HTTP başlığı kullanılarak çevreleyen tanım (geliştirme, evreleme, üretim) gerçekleştirilmelidir. Şimdi Microsoft, topluluk Webass Blazor'u doldururken aşağıdaki ortamları otomatik olarak alıyor: [LIST] [*]İLE dotnet build: “Gelişim” [*]İLE dotnet publish: “Üretme” [/LIST] Geliştiriciler ayrıca bir proje ayarı kullanarak çevre türünü açıkça ayarlayabilir, örneğin evreleme için: <WasmApplicationEnvironmentName>Staging</WasmApplicationEnvironmentName> Blazor Webassembly'de sınıfta HttpClient Standartta, yanıt akışı artık performansı artırmak ve bellek gereksinimlerini azaltmak için etkindir. Ancak, sadece eşsiz işlemler mümkündür. Bu, Microsoft Learn'da belgelenen .NET 10.0'daki kırılma değişikliklerinden biridir. HTTPClient'te cevap akışı aşağıdakilerle devre dışı bırakılabilir: requestMessage.SetBrowserResponseStreamingEnabled(false); [SIZE=4][B].NET-Base Bookshop'taki İyileştirmeler[/B][/SIZE] Sertifikayı ihraç etmek için bir iyileştirme zaten Nichestet 10.0'ın önizleme 2 idi, ancak orada çalışmadı. Şimdi Önizleme 3'te, yeni yöntemle Şifreleme ve Hash ve Hashing ile sertifikaları gerçekten dışa aktarabilirsiniz. ExportPkcs12() Mevcut yönteme ek olarak Export(): byte[] pfxData = cert.ExportPkcs12(Pkcs12ExportPbeParameters.Pbes2Aes256Sha256, password); Eski prosedürler (3des cly ve sha1-hashing) Export() Ancak yeni yöntemi kullanarak da mümkündür: byte[] pfxData = cert.ExportPkcs12(Pkcs12ExportPbeParameters.Pkcs12TripleDesSha1, password); Buna ek olarak, .NET 10.0 Önizleme 3, notlarda bulunabilen doğrulama, telemetri ve ml.net bağlamında bazı küçük iyileştirmeler sunar. [SIZE=4][B]görüş[/B][/SIZE] Kasım 2025'te yayınlanana kadar, .NET 10.0'ın yayınlanmasının dört önizleme sürümü ve iki aday sürümü bekleyebilirsiniz. (Mayıs)