.NET 8.0, Blazor Server ve Blazor WebAssembly’nin karıştırılmasına izin verecek

celeron

Global Mod
Global Mod


  1. .NET 8.0, Blazor Server ve Blazor WebAssembly’nin karıştırılmasına 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’nin karıştırılmasına olanak tanır. Microsoft, Önizleme 5’te Razor Bileşenlerinin sunucu tarafında işlenmesinde 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:

Reklamcılık



dotnet new blazor --use-server -o Projektname


Visual Studio 2022 Sürüm 17.7 Önizleme 3’te artık geliştirme ortamında konuşma seçeneği bulunmaktadır (Şekil 1).




Sunucu tarafı işleme ve SPA adaları ile Blazor projelerinin oluşturulması (Şekil 1)



Sunucu tarafı işleme ve SPA adaları ile Blazor projelerinin oluşturulması (Ş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 kurmanız değil, aynı zamanda Razor sözdizimini açıkça 8.0 sürümüne ayarlamanızdır:

Reklamcılık


<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ğırmak AddServerRenderMode() Tamamlamak:


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


Bu çağrıyı manuel olarak eklemezseniz, bileşen çalışmaz ve tarayıcı konsolunda yalnızca “SyntaxError: Unexpected end of JSON input” bildirir.

Oluşturma modunu bileşende ve arayanda aynı anda ayarlamak da mümkün değildir. Blazor bunu şu çalışma zamanı hatasıyla onaylıyor: “Bileşen türü Counter sabit bir oluşturma moduna sahiptir Microsoft.AspNetCore.Components.Web.ServerRenderModebu nedenle, bu bileşeni kullanırken herhangi bir render modu belirtmek geçerli değildir.”.

Blazor WebAssembly ile SPA Adaları


.NET 8.0 Önizleme 5’te SPA adaları 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. Öncelikle, bu NuGet paketine başvurulması 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">


Gelecekteki önizleme sürümlerinde bu tür dış kaynak kullanımına olan ihtiyacın ortadan kaldırılacağı umulmaktadır.

Artık oluşturma modunu kullanarak bu DLL’den bir bileşen oluşturmak mümkündür. "WebAssembly" kullanmak:


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


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


@attribute [RenderModeWebAssembly]


Varsayılan olarak, bu tür WebAssembly bileşenleri sunucu tarafında önceden oluşturulur. Geliştiriciler gerekirse bunu kapatabilir:


@attribute [RenderModeWebAssembly(prerender: false)]


sırasıyla


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


Blazor WebAssembly’ı bir Blazor Server yandan işleme uygulamasına entegre etmenin çalışan bir örneği GitHub’da bulunabilir.



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



Bir sonraki uzun süreli destek sürümü, .NET 8.0 ile 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ı uygulamalı bilgi verir.







Tek bir Blazor uygulamasında Blazor Server ve Blazor Server karışımı


Ayrıca artık Blazor Server ve Blazor WebAssembly’ı tek bir bileşende kolayca karıştırabilirsiniz. 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 Index.razor ana sayfasını gösterir Counter.razor bir kez Blazor Server 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 Server için bir websocket bağlantısı kurar ve ardından Blazor WebAssembly için WebAssembly dosyalarını yükler. Çerçeve bileşeni, tamamen 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: Tek sayfada Blazor Server ve Blazor WebAssembly Karışımı




Tarayıcı, Blazor Server için bir websocket bağlantısı kurar ve ardından Blazor WebAssembly için WebAssembly dosyalarını yükler (Şekil 2).



Tarayıcı, Blazor Server için bir websocket bağlantısı kurar ve ardından Blazor WebAssembly için WebAssembly dosyalarını 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 Server üzerinden yapıldığı ve ardından Blazor WebAssembly’a geçildiği duyurulan “Auto” rendering modu, hala kayıp

Microsoft blog gönderisinde şunları duyurur: “Çeşitli Blazor barındırma modellerinin .NET 8’de tek bir modelde birleştirilmesinin bir parçası olarak, Blazor proje şablonlarının sayısını da birleştiriyoruz. Bu önizleme sürümünde Blazor Sunucusunu ekledik şablonu ve barındırılan 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 Preview 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 gelir, çünkü geliştiriciler artık aşağıdaki özelliklere sahiptir: [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 küme türleri olabilir. Mevcut doğrulama ek açıklamaları dikkate alınır ve doğrulama hatası çıktıları yerleşik Blazor bileşenleriyle birlikte verilir <ValidationMessage> Ve <ValidationSummary> olası.

Ayrıca, 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. Önizleme 4 for Blazor’da 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 Server tarafında işleme 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ı. .NET 8.0 Önizleme 6’da artık Bileşen Nesne Modeli’ni (COM) kullanmak için benzer bir seçenek bulunmaktadır (yalnızca Windows altında mevcuttur). COM arabiriminin sarmalayıcısı bunu kullanmalıdır [GeneratedComInterface] annotate Bu arabirimleri uygulayan sınıflar ek açıklamayı alır [GeneratedComClass]. .NET 7.0’da zaten tanıtılan ek açıklama ile [LibraryImport] geliştiriciler artık COM arabirimlerini parametre ve dönüş türleri olarak kullanabilir. Bu ek açıklamalarla, C# derleyicisi, normalde yalnızca çalışma zamanında oluşan COM erişim kodunu zaten geliştirme zamanında oluşturur. Oluşturulan kod projede /Dependencies/Analyzers/Microsoft.Interop.ComInterfaceGenerator dalında bulunabilir.

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

Ancak, blog girişinde, 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ürlerinden biri eksik partial anahtar kelimeler. için kod üretilmeyecek IComInterface.”

doğru:


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


Ayrıca Microsoft, COM için Kaynak Oluşturucu’nun bazı sınırlamalarını belgelemektedir. Bu, jeneratörün IDispatch– Ve IInspectabletabanlı arayüzler çalışır ve ne COM özelliklerini ne de COM olaylarını destekler. Ayrıca, geliştiriciler anahtar kelime ile 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ülecek olan ve yalnızca daha sonraki bir ana sürümde geliştirilebilecek olan .NET 8.0’ın son sürümünde geçerli olacaktır.

ZIP için iyileştirmeler


Sınıf System.IO.Compression.ZipFileklasik .NET Framework 4.5’ten bu yana 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ılarının önbelleğe alınması 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 kadar büyük ölçüde azaltabilir.”

C# 12.0’daki yenilikler


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

  • Bir önleyici, bir yöntem çağrısının durdurulmasına ve yeniden yönlendirilmesine izin verir. Microsoft, bunu öncelikli olarak önceden 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 .NET uygulamalarının bir derlemesini sunuyor. Bu, hem bu platformlarla sınırlı uygulamalar (“iOS için .NET”) hem de .NET Çoklu Platform Uygulama Kullanıcı Arabirimi (.NET MAUI) için mümkündür. Bu durumda uygulamalar artık Mono üzerinde çalışmaz ve iOS için .NET’e yönelik uygulama paketleri önemli ölçüde daha küçüktür, ancak .NET MAUI için daha büyüktür (Şekil 4). Blog girişinde yer alan açıklamaya göre Microsoft, sorunu fark etmiş ve bunu çözmek istiyor, böylece burada yüzde 30 civarında bir boyut avantajı elde edilebiliyor.

Microsoft, ayrı bir blog gönderisinde .NET MAUI için bir dizi hata düzeltmesini ele almaktadır. Ayrıca artık Visual Studio Code için bir .NET MAUI uzantısının ilk sürümü var.




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 Preview 6 duyurusu Microsoft’un geliştirici blogunda bulunabilir.


(Mayıs)



Haberin Sonu