我创建了一个新的 Blazor WebAssembly 项目(目标框架:.NET 8.0、安装了 SDK 和托管包),并希望添加 Hub 功能以与其他客户端进行通信,但我很早就陷入困境:扩展方法 AddSignalR() 和类型集线器可用。
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Spire;
using Spire.Shared;
using Microsoft.AspNetCore.SignalR.Client;
using Microsoft.AspNetCore.SignalR.Protocol;
using Microsoft.AspNetCore.SignalR;
internal class Program
{
private static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.RootComponents.Add<HeadOutlet>("head::after");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
builder.Services.AddScoped<ISessionData>(sessiondata => new SessionData());
builder.Services.AddSingleton<IMainData>(mainData => new MainData());
builder.Services.AddSignalR(); // <- not working
WebAssemblyHost app = builder.Build();
await app.RunAsync();
}
}
显然,我丢失了一些包,但似乎并不清楚哪个是正确的。我尝试过的这些软件包:
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Blazor.Extensions.Canvas" Version="1.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.0" PrivateAssets="all" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="8.0.0" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client.Core" Version="8.0.0" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="8.0.0" />
</ItemGroup>
</Project>
我错过了什么?
所以,事实证明它与项目的Sdk属性(您在VS中选择的项目类型)有某种关系。
“Microsoft.NET.Sdk.BlazorWebAssembly”(项目类型“Blazor Webassemble Standalone App”)没有介绍我错过的东西,而“Microsoft.NET.Sdk.Web”(项目类型“Blazor Web App”)则介绍了。