.NET 8.0, Blazor Server ile Blazor WebAssembly’ı karıştırmanıza izin verecek

Saberie

Active member


  1. .NET 8.0, Blazor Server ile Blazor WebAssembly’ı karıştırmanıza izin verecek

Microsoft, .NET 8.0 için altıncı önizlemeyi yayımladı. Diğer şeylerin yanı sıra, basitleştirilmiş formlar ve ZIP iyileştirmeleri getirir ve Blazor Server ile BlazorWebAssembly’ı birleştirmenize olanak tanır. Microsoft, Preview 5’te Razor Components sunucu tarafı işlemede Blazor Server ile tek sayfalı uygulama adalarını zaten kullanıma sunmuştu. Ancak, şimdiye kadar geliştiriciler bu tür projeleri yalnızca komut satırı aracılığıyla oluşturabiliyordu:

Duyuru



dotnet new blazor --use-server -o Projektname


Visual Studio 2022 sürüm 17.7 Önizleme 3, geliştirme ortamında artık bir Okumayı Konuş seçeneğine sahiptir (Şekil 1).




Sunucu tarafı oluşturma ve SPA adaları ile Blazor projeleri oluşturma (Şekil 1).



Sunucu tarafı oluşturma ve SPA adaları ile Blazor projeleri oluşturma (Şekil 1).



Önizleme 5’teyken, SPA adalarını yalnızca bileşenin kendisinde tanımlayabilirsiniz.


@attribute [RenderModeServer]


bu artık her arama bileşeninde de yapılabilir:


<Counter @rendermode="@RenderMode.Server" />


Bunun ön koşulu, yalnızca proje dosyasında Hedef Çerçeveyi ayarlamanız değil, aynı zamanda Razor sözdizimini açıkça 8.0 sürümüne ayarlamanızdır:

Duyuru


<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<RazorLangVersion>8.0</RazorLangVersion>

</PropertyGroup>

</Project>


Oluşturma modunu ayarlamak için yeni seçeneğin bir başka gereksinimi de program.cs başlangıç dosyasında olmasıdır.


app.MapRazorComponents<App>();


ne de yöntemi çağırarak AddServerRenderMode() tamamlamak:


app.MapRazorComponents<App>().AddServerRenderMode()


Bu aramayı manuel olarak eklemezseniz, bileşen çalışmaz ve tarayıcı konsolunda yalnızca “SyntaxError: Unexpected end of JSON input” raporunu verir.

Ayrıca, bileşende ve arayanda oluşturma modunu aynı anda ayarlayamazsınız. Blazor bunu şu çalışma zamanı hatasıyla kabul ediyor: “Bileşen türü Counter sabit bir oluşturma moduna sahiptir Microsoft.AspNetCore.Components.Web.ServerRenderModebu nedenle, bu bileşeni kullanırken herhangi bir oluşturma modu belirtmek geçersizdir.”.

Blazor WebAssembly ile SPA Adaları


.NET 8.0 Önizleme’de 5 SPA adası yalnızca Blazor Server ile mümkünken, Önizleme 6’da Microsoft artık bir alternatif olarak Blazor WebAssembly’yi de sunuyor. Şimdiye kadar bu takımyıldız için bir proje şablonu yok, ancak “Blazor Web App” proje şablonunu manuel olarak yeniden oluşturabilirsiniz. Her şeyden önce, bu NuGet paketine başvurmanız gerekir:


<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.0-preview.6.23329.11" />
</ItemGroup>


Ardından, Program.cs başlangıç dosyasındaki yöntemi kullanmanız gerekir. AddWebAssemblyComponents() sonra ara AddRazorComponents():


builder.Services.AddRazorComponents().AddWebAssemblyComponents();


yöntemin yanı sıra AddWebAssemblyRenderMode() Sonrasında MapRazorComponents<App>() kullanmak:


app.MapRazorComponents<App>().AddWebAssemblyRenderMode();


Diğer bir gereklilik ise, Blazor WebAssembly ile işlenecek tüm Razor bileşenlerinin Microsoft.NET.Sdk.BlazorWebAssembly SDK’ya başvuran ayrı bir DLL’de bulunmasıdır:


<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">


Umarız, bu tür dışsallaştırma ihtiyacı gelecekteki ön izleme sürümlerinde ortadan kaldırılacaktır.

Artık render modunu kullanarak bu dll’den bir bileşen oluşturabilirsiniz. "WebAssembly" kullanmak:


<Counter @rendermode="@RenderMode.WebAssembly" />


Alternatif olarak, bileşenin kendisi bu oluşturma modunu bildirebilir:


@attribute [RenderModeWebAssembly]


Varsayılan olarak, bu WebAssembly bileşenleri sunucu tarafında önceden işlenir. Geliştiriciler gerekirse devre dışı bırakabilir:


@attribute [RenderModeWebAssembly(prerender: false)]


sırasıyla


<Counter @rendermode="@(new WebAssemblyRenderMode(prerender: false))


Blazor WebAssembly’ı bir Blazor Sunucu tarafı işleme uygulamasına entegre etmenin çalışan bir örneği GitHub’da mevcuttur.



betterCode() .NET 8.0, çevrimiçi konferans, 21 Kasım 2023



Bir sonraki uzun süredir devam eden destek sürümü, .NET 8.0 ile birlikte görünecektir. 21 Kasım 2023’te Haberler ve www.IT-Visions.de tarafından sunulan betterCode() .NET 8.0 çevrimiçi konferansı, .NET 8.0’a ilişkin temel bir genel bakış elde etmek için araçlar sağlayacaktır. Uzman konuşmaları .NET 8.0, ASP.NET Core 8.0, Blazor 8.0, .NET MAUI, C# 12.0 ve daha fazlasındaki yenilikleri gösterir. Dört tam günlük atölye çalışması pratik bilgiler verir.







Blazor Sunucusu ile Blazor Sunucusunu bir Blazor uygulamasında birleştirme


Artı, artık Blazor Server ve Blazor WebAssembly’ı tek bir bileşende kolayca birleştirebilirsiniz. Bunu yapmak için başlangıç dosyasında her iki oluşturma modunu arka arkaya etkinleştirin:


builder.Services.AddRazorComponents().AddWebAssemblyComponents().AddServerComponents();


VE


app.MapRazorComponents<App>().AddWebAssemblyRenderMode().AddServerRenderMode();


Liste 1, bir bileşen içeren bir Index.razor ana sayfasını gösterir Counter.razor bir kez Blazor Sunucusu aracılığıyla ve bir kez de Blazor WebAssembly aracılığıyla. Şekil 2, web tarayıcısı üzerindeki etkiyi göstermektedir: Tarayıcı, Blazor Sunucusu ile bir WebSocket bağlantısı kurar ve ardından WebAssembly dosyalarını Blazor WebAssembly’a yükler. Çerçeve bileşeni, yalnızca sunucu tarafı işleme ile oluşturulur.


@page "/"

<PageTitle>Index</PageTitle>

<h1>Haberler Developer - Schnelltest .NET 8.0 Preview 6</h1>
(C) Dr. Holger Schwichtenberg 11.07.2023
<hr />
<h3> Counter mit Blazor Server</h3>

<div>
<Counter IncrementAmount="2" @rendermode="@RenderMode.Server" />
</div>
<h3> Counter mit Blazor WebAssembly</h3>

<div>
<Counter IncrementAmount="2" @rendermode="@RenderMode.WebAssembly" />
</div>


Liste 1: Blazor Server ve Blazor WebAssembly’ı tek sayfada birleştirme




Tarayıcı, Blazor Sunucusu ile bir WebSocket bağlantısı kurar ve ardından WebAssembly dosyalarını Blazor WebAssembly'a yükler (Şekil 2).



Tarayıcı, Blazor Sunucusu ile bir WebSocket bağlantısı kurar ve ardından WebAssembly dosyalarını Blazor WebAssembly’a yükler (Şekil 2).



Preview 6 ile Microsoft, 24 Ocak 2023’te duyurulan “Blazor United”a doğru büyük bir adım atıyor. Ancak, renderlemenin önce Blazor Sunucusu üzerinden yapılıp ardından Blazor’a geçildiği duyurulan “Auto” rendering modu, hala WebAssembly eksik.

Microsoft blog gönderisinde şunları duyuruyor: “.NET 8’de çeşitli Blazor barındırma modellerini tek bir modelde birleştirmenin bir parçası olarak, Blazor proje modellerinin sayısını da birleştiriyoruz. Bu önizleme sürümünde, Blazor Server şablonunu ekledik ve barındırdık. ASP .NET Core”, Blazor WebAssembly şablonundan kaldırıldı. Yeni Blazor Web Uygulaması şablonu kullanılırken her iki senaryo da seçeneklerle temsil edilir.” Ancak, hızlı test bunun Önizleme 6’da henüz tamamlanmadığını gösteriyor: önceden bilinen tüm Blazor proje şablonları hala kullanılabilir (Şekil 3) .




.NET 8.0 Önizleme 6'daki Blazor proje şablonları (Şek. 3).



.NET 8.0 Önizleme 6’daki Blazor proje şablonları (Şekil 3).



Daha basit formlar


Blazor’da sunucu tarafı işlemede form girişlerinin daha önce zahmetli bir şekilde işlenmesi CascadingModelBinder VE FormData.Entries.TryGetValue() .NET 8.0 Preview 6’dan itibaren daha kolay hale geliyor, çünkü geliştiriciler artık bir dolandırıcılığa sahip [SupplyParameterFromForm] açıklama ekleyebilir (bkz. Listeleme 2). HTTP isteğinde sağlanan tüm ad-değer çiftleri, ada karşılık gelen özelliklerde saklanır. Açıklamalı özellikler, basit veri türleri veya karmaşık türler (sınıflar, yapılar, kayıtlar) veya koleksiyon türleri olabilir. Mevcut doğrulama ek açıklamalarına uyulur ve doğrulama hatası çıktıları yerleşik Blazor bileşenleriyle birlikte verilir <ValidationMessage> VE <ValidationSummary> olası.

Ek olarak, Blazor artık sunucu tarafında işlerken sayfa içeriğinin bir kısmını koruyor, böylece kullanıcılar daha az titreme efekti görüyor. Blazer için Önizleme 4’te tanıtılan bölümler (<SectionOutlet> VE <SectionContent>) artık akış oluşturma ile ve basamaklı değerler ve hata sınırları ile bağlantılı olarak da çalışır.


@page "/Registration/"
@using NET8_BlazorSSR;
@layout MainLayout
@inject NavigationManager nav

<h3>Bestellung des Fachbuchabos</h3>
<hr />

@if (!reg.Success)
{
<EditForm method="POST" Model="reg" OnValidSubmit="HandleSubmit">
<DataAnnotationsValidator />
<p>Ihr Name: <InputText @bind-Value="reg.Name" /> <ValidationMessage For="@(()=>reg.Name)" /></p>
<p>Ihr E-Mail-Adresse: <InputText @bind-Value="reg.EMail" /> <ValidationMessage For="@(()=>reg.EMail)" /></p>
<button type="submit">Bestellen</button>
</EditForm>
}

@if (reg.Success)
{
<div>
<p>Liebe(r) @reg.Name,</p>
<p>vielen Dank für Ihre Registrierung zum Fachbuchabo!</p>
<p><a href="/confirmation/@reg.Name">Bestätigung ausdrucken</a></p>
</div>
}
@code {
[SupplyParameterFromForm]
BookSubscriptionRegistration reg { get; set; }

protected override void OnInitialized()
{
reg = new();
}


void HandleSubmit()
{
reg.Save();
reg.Success = true;
}

}


Liste 2: Blazor Sunucu tarafı oluşturma ile doğrulama dahil, basitleştirilmiş form verisi bağlama

Bileşen nesne modeli için kaynak oluşturucu


.NET 7.0’da Microsoft, açıklama yoluyla yerel API çağrıları (herhangi bir işletim sistemi platformunda) için bir kaynak oluşturucuya sahipti [LibraryImport] tanıtıldı. Bileşen Nesne Modeli’ni (COM) kullanmak için benzer bir seçenek artık .NET 8.0 Önizleme 6’da mevcuttur (yalnızca Windows’ta mevcuttur). COM arayüz sarmalayıcısı bunu kullanmalıdır. [GeneratedComInterface] annotate Bu arabirimleri uygulayan sınıflar ek açıklamayı alır [GeneratedComClass]. Ek açıklama zaten .NET 7.0’da tanıtıldı [LibraryImport] geliştiriciler artık COM arabirimlerini parametre ve dönüş türleri olarak kullanabilir. Bu ek açıklamalarla, C# derleyicisi zaten geliştirme sırasında normalde yalnızca çalışma zamanında görünen COM erişim kodunu oluşturur. Oluşturulan kod, projede /Dependencies/Analyzers/Microsoft.Interop.ComInterfaceGenerator dalında bulunur.

Açıklamalı mevcut arayüzler için [ComImport] Visual Studio, dönüştürülmesini önerir [GeneratedComInterface] Önce. Visual Studio daha sonra bu arabirimleri uygulayan sınıflar için başarısız olur [GeneratedComClass] Önce.

Ancak, blog gönderisinde, konuyla ilgili tüm COM örneklerinde anahtar kelime eksik partial. Örneğin, Microsoft şöyle yazar:


[GeneratedComInterface]
[Guid("5401c312-ab23-4dd3-aa40-3cb4b3a4683e")]
interface IComInterface
{
void DoWork();
void RegisterCallbacks(ICallbacks callbacks);
}


Ancak bu, Visual Studio 17.7 Önizleme 3 ile .NET 8.0 Önizleme 6’da derleyici hatasına yol açar: “Arayüz IComInterface veya içeren türlerden biri eksik partial anahtar kelime. Kod için oluşturulmayacak IComInterface.”

doğru:


[GeneratedComInterface]
[Guid("5401c312-ab23-4dd3-aa40-3cb4b3a4683e")]
partial interface IComInterface
{
void DoWork();
void RegisterCallbacks(ICallbacks callbacks);
}


Ek olarak Microsoft, COM için Kaynak Oluşturucu’nun bazı sınırlamalarını belgelemektedir. Bu, jeneratörün IDispatch– VE IInspectablearayüzlere dayalı olarak çalışır ve COM özelliklerini veya COM olaylarını desteklemez. Ayrıca, geliştiriciler anahtar kelimeyle bir COM sınıfı oluşturamazlar. new etkinleştir, ancak yalnızca arayarak CoCreateInstance(). Bu kısıtlamalar, Kasım 2023’te piyasaya sürülmesi planlanan .NET 8.0’ın son sürümünde geçerli olmaya devam etmelidir ve yalnızca bir sonraki ana sürümde geliştirilebilir.

ZIP için iyileştirmeler


Sınıf System.IO.Compression.ZipFileklasik .NET Framework 4.5’ten beri ve modern .NET’te .NET Core 1.0 sürümünden beri var olan iki yeni statik yöntem alır CreateFromDirectory() VE ExtractToDirectory()doğrudan bir dosya sistemi klasöründen bir ZIP arşivi oluşturmak veya çıkarmak için.

Microsoft artık .NET 7.0’da tanıtılan web sunucusu çıktısını önbelleğe almak için Redis’e doğrudan bağlantı sunuyor. HTTP.sys’nin Windows altında bir web sunucusu olarak kullanılmasıyla bağlantılı olarak geliştiriciler, Windows çekirdeğinde yanıt arabelleğe almayı etkinleştirebilir. Microsoft, “Etkilenen senaryolarda, bu, yanıt sürelerini dakikalardan (veya toplam başarısızlıktan) saniyelere önemli ölçüde azaltabilir” diyor.

C# 12.0’daki yenilikler


Başka bir blog gönderisinde Microsoft, C# 12.0’daki üç yeni dil özelliğini ele alıyor:

  • Bir önleyici, bir yöntem çağrısını durdurmanıza ve yeniden yönlendirmenize olanak tanır. Microsoft, bunu esas olarak erken derleyiciyle daha fazla kod uyumlu hale getirmek için kullanmak istiyor.
  • Operatör nameof artık başlatıcılar dahil olmak üzere üye adlarıyla, statik üyelerde ve özniteliklerde de çalışır (Listeleme 3’e bakın).
  • Dizileri optimize etmek için artık satır içi diziler var.

internal class NameOf
{
public string S { get; } = "";
public static int StaticField;
public string NameOfLength { get; } = nameof(S.Length);
public static void NameOfExamples()
{
Console.WriteLine(nameof(S.Length));
Console.WriteLine(nameof(StaticField.MinValue));
}
[Description($"String {nameof(S.Length)}")]
public int StringLength(string s)
{ return s.Length; }
}


Liste 3: nameof() için uzantılar (kaynak: Microsoft)

Apple işletim sistemleri için yerel AOT


Microsoft, iOS, Mac Catalyst ve tvOS üzerinde .NET uygulamaları için yeni .NET Native Compiler ile ilk kez bir .NET uygulamaları koleksiyonu sunuyor. Bu, hem bu platformlarla sınırlı uygulamalar (iOS için .NET) hem de .NET platformlar arası uygulama kullanıcı arabirimi (.NET MAUI) için mümkündür. Bu nedenle uygulamalar artık Mono üzerinde çalışmamaktadır ve iOS için .NET uygulama paketleri önemli ölçüde daha küçüktür, ancak .NET MAUI için daha büyüktür (Şekil 4). Blog gönderisinde yer alan açıklamaya göre Microsoft, sorunu fark etti ve sorunu gidermek istiyor, böylece burada yüzde 30 civarında bir boyut avantajı yakalanabilecek.

Microsoft, ayrı bir blog gönderisinde .NET MAUI için bir dizi hata düzeltmesini ele almaktadır. Ek olarak, Visual Studio Code için bir .NET MAUI uzantısının erken bir sürümü kullanıma sunuldu.




Yerel AOT aracılığıyla küçültülmüş uygulama paketleri (Şek. 4).



Yerel AOT aracılığıyla küçültülmüş uygulama paketleri (Şek. 4).


(Resim: Microsoft)



.NET 8.0 Önizleme 6 duyurusu, Microsoft’un geliştirici blogunda bulunabilir.


(Mayıs)



Haberin Sonu
 
Üst