如何在Windows版MAUI Blazor中正确引入含SignalR的RCL
解决Blazor Server与Windows MAUI Blazor复用SignalR RCL的平台依赖问题
问题根源
你的Razor类库(RCL)中引用了Microsoft.AspNetCore.App框架,该依赖针对ASP.NET Core服务器端运行时。MAUI项目默认包含Android、iOS等多平台目标框架,但这些非Windows平台没有对应的Microsoft.AspNetCore.App运行时包,因此触发There was no runtime pack...错误。直接移除MAUI的多平台目标后,又会丢失Windows打包所需的项目配置,导致发布时出现MSB4057错误。
解决方案
1. 调整RCL的项目配置,移除不必要的框架依赖
RCL仅使用SignalR客户端功能,Microsoft.AspNetCore.SignalR.Client NuGet包已包含客户端所需的全部组件,无需额外引用Microsoft.AspNetCore.App框架(Blazor Server项目本身会自带该框架依赖)。
修改后的RCL项目文件:
<Project Sdk="Microsoft.NET.Sdk.Razor"> <PropertyGroup> <TargetFramework>net7.0</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> <AddRazorSupportForMvc>false</AddRazorSupportForMvc> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="7.0.3" /> </ItemGroup> <ItemGroup> <SupportedPlatform Include="browser" /> </ItemGroup> </Project>
2. 配置MAUI Blazor项目仅针对Windows构建
由于你的MAUI应用仅运行在Windows,无需保留其他平台目标,但需确保Windows打包的必要配置完整:
方式一:保留多平台目标,但默认构建Windows
在MAUI项目的<PropertyGroup>中添加默认目标框架配置:
<DefaultTargetFramework>net7.0-windows</DefaultTargetFramework>
既保留项目文件中的多平台声明,又默认只构建Windows目标,避免非Windows平台的依赖冲突。
方式二:仅保留Windows目标并完善打包配置
如果确实不需要其他平台,修改MAUI项目的<PropertyGroup>如下,确保Windows打包所需属性齐全:
<PropertyGroup> <TargetFramework>net7.0-windows10.0.19041.0</TargetFramework> <OutputType>WinExe</OutputType> <UseMaui>true</UseMaui> <SingleProject>true</SingleProject> <RootNamespace>YourAppNamespace</RootNamespace> <ApplicationManifest>Properties\app.manifest</ApplicationManifest> <Platforms>Windows</Platforms> <WindowsPackageType>MSIX</WindowsPackageType> </PropertyGroup>
3. 验证与发布
- 重新在MAUI项目中引用修改后的RCL,确认
There was no runtime pack...错误消失。 - 发布MAUI Windows应用时,选择
net7.0-windows作为目标框架,确认打包流程正常,不会触发MSB4057错误。
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

