今天,我们发布了Blazor WebAssembly的新预览更新,其中包含许多出色的新功能和增强功能。这是此版本中的新增功能:- 版本更新为3.2。
 - 简化发布
 - 下载大小改进
 - .NET SignalR客户端支持
 

开始
要开始使用Blazor WebAssembly 3.2.0 Preview 1,  请安装.NET Core 3.1 SDK  ,然后运行以下命令:dotnet new -i Microsoft.AspNetCore.Blazor.Templates::3.2.0-preview1.20073.1
就这样!您可以在https://blazor.net上找到其他文档和示例  。更新现有项目
要将现有的Blazor WebAssembly应用程序从3.1.0预览版4升级到3.2.0预览版1:- 将所有指向Microsoft.AspNetCore.Blazor *包的链接更新为3.2.0-preview1.20073.1。
 - 在   Blazor WebAssembly客户端项目的Program.cs中,替换  
BlazorWebAssemblyHost.CreateDefaultBuilder() 为  WebAssemblyHostBuilder.CreateDefault()。 - 通过  调用  将Blazor WebAssembly客户端项目中的根组件注册从  
Startup.Configure 移到  Program.csbuilder.RootComponents.Add<TComponent>( )。 - Blazor WebAssembly  
Startup.ConfigureServices  Program.cs   builder.Services. -  Startup.cs  Blazor WebAssembly client project.
 - Blazor WebAssembly ASP.NET Core,  Server   
app.UseClientSideBlazorFiles<Client.Startup>(...)  app.UseClientSideBlazorFiles<Client.Program>(...). 
3.2
在此版本中,我们将Blazor WebAssembly软件包版本升级到3.2,以使其与最近发布的.NET Core 3.1长期支持(LTS)有所区别。没有相应的.NET Core 3.2版本-新版本3.2仅适用于Blazor WebAssembly。 Blazor WebAssembly当前基于.NET Core 3.1,但不继承.NET Core 3.1 LTS的状态。取而代之的是,计划于今年5月发布的Blazor WebAssembly的初始版本将是Current,如“ .NET Core支持策略 ”中所述,“将在下一版本的Current或LTS之后保持三个月” 。 5月的3.2版之后的Blazor WebAssembly的下一个即将发布的版本将是.NET 5。。这意味着在发布.NET 5之后,您将需要将Blazor WebAssembly应用程序升级到.NET 5以支持它。简化发布
在此版本中,我们简化了Blazor WebAssembly的启动和托管API。最初,Blazor WebAssembly的启动和部署API旨在反映ASP.NET Core中使用的模式,但并非所有概念都相关。更新的API还允许使用一些新方案。这是新的启动代码在Program.cs中的样子:public class Program
{
    public static async Task Main(string[] args)
    {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.RootComponents.Add<App>("app");
        await builder.Build().RunAsync();
    }
}
Blazor WebAssembly应用程序现在支持Main该应用程序入口点的异步方法。要创建默认主机,请致电WebAssemblyHostBuilder.CreateDefault()。使用链接器配置根组件和服务;Startup不再需要单独的类。添加了以下示例WeatherService,因此可以通过依赖项注入(DI)使用它:public class Program
{
    public static async Task Main(string[] args)
    {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.Services.AddSingleton<WeatherService>();
        builder.RootComponents.Add<App>("app");
        await builder.Build().RunAsync();
    }
}
创建主机后,您可以在显示任何组件之前从根DI访问服务。如果您需要在显示任何内容之前运行一些初始化逻辑,这将很有用:public class Program
{
    public static async Task Main(string[] args)
    {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.Services.AddSingleton<WeatherService>();
        builder.RootComponents.Add<App>("app");
        var host = builder.Build();
        var weatherService = host.Services.GetRequiredService<WeatherService>();
        await weatherService.InitializeWeatherAsync();
        await host.RunAsync();
    }
}
主机现在还为应用程序提供了中央配置的实例。该配置未填充任何默认数据,但是您可以根据需要在应用程序中填充它。public class Program
{
    public static async Task Main(string[] args)
    {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.Services.AddSingleton<WeatherService>();
        builder.RootComponents.Add<App>("app");
        var host = builder.Build();
        var weatherService = host.Services.GetRequiredService<WeatherService>();
        await weatherService.InitializeWeatherAsync(host.Configuration["WeatherServiceUrl"]);
        await host.RunAsync();
    }
}
下载大小改进
Blazor WebAssembly应用程序在每个程序集中运行.NET IL链接器,以从应用程序中删除未使用的代码。在以前的版本中,仅主框架库被切断。从此版本开始,还修剪了Blazor组件,从而略微减小了大小-大约100 KB。和以前一样,如果您需要禁用绑定,请<BlazorLinkOnBuild>false</BlazorLinkOnBuild> 在项目文件中添加自己的绑定。.NET SignalR客户端支持
现在,您可以使用.NET SignalR客户端从Blazor WebAssembly应用程序中使用SignalR。要在Blazor WebAssembly应用程序中尝试SignalR,请执行以下操作:- 创建一个在ASP.NET Core上托管的Blazor WebAssembly应用程序。
dotnet new blazorwasm -ho -o BlazorSignalRApp
 - 将ASP.NET Core SignalR客户端软件包添加到Client项目。
cd BlazorSignalRApp
dotnet add Client package Microsoft.AspNetCore.SignalR.Client
 - 在Server项目中,添加以下Hub / ChatHub.cs类。
using System.Threading.Tasks;
using Microsoft.AspNetCore.SignalR;
namespace BlazorSignalRApp.Server.Hubs
{
    public class ChatHub : Hub
    {
        public async Task SendMessage(string user, string message)
        {
            await Clients.All.SendAsync("ReceiveMessage", user, message);
        }
    }
}
 - 在Server项目中,在方法中添加SignalR服务
Startup.ConfigureServices。
services.AddSignalR();
 - 还要添加端点
ChatHub处Startup.Configure。
.UseEndpoints(endpoints =>
{
    endpoints.MapDefaultControllerRoute();
    endpoints.MapHub<ChatHub>("/chatHub");
    endpoints.MapFallbackToClientSideBlazor<Client.Program>("index.html");
});
 - 使用以下标记更新Client项目中的Pages / Index.razor。
@using Microsoft.AspNetCore.SignalR.Client
@page "/"
@inject NavigationManager NavigationManager
<div>
    <label for="userInput">User:</label>
    <input id="userInput" @bind="userInput" />
</div>
<div class="form-group">
    <label for="messageInput">Message:</label>
    <input id="messageInput" @bind="messageInput" />
</div>
<button @onclick="Send" disabled="@(!IsConnected)">Send Message</button>
<hr />
<ul id="messagesList">
    @foreach (var message in messages)
    {
        <li>@message</li>
    }
</ul>
@code {
    HubConnection hubConnection;
    List<string> messages = new List<string>();
    string userInput;
    string messageInput;
    protected override async Task OnInitializedAsync()
    {
        hubConnection = new HubConnectionBuilder()
            .WithUrl(NavigationManager.ToAbsoluteUri("/chatHub"))
            .Build();
        hubConnection.On<string, string>("ReceiveMessage", (user, message) =>
        {
            var encodedMsg = user + " says " + message;
            messages.Add(encodedMsg);
            StateHasChanged();
        });
        await hubConnection.StartAsync();
    }
    Task Send() => hubConnection.SendAsync("SendMessage", userInput, messageInput);
    public bool IsConnected => hubConnection.State == HubConnectionState.Connected;
}
 - 创建并运行服务器项目
cd Server
dotnet run
 - 在两个单独的浏览器选项卡中打开应用程序,以通过SignalR实时通信。
 
已知的问题
以下是此版本中的已知问题的列表,这些问题将在以后的更新中修复。评论
我们希望您喜欢此Blazor WebAssembly预览版中的新功能!在GitHub上报告问题时,请告诉我们您的想法。感谢您使用Blazor。