.NET 8 Blazor WASM中Mono断言失败问题求助
遇到的错误:
Error: [MONO] * Assertion at /__w/1/s/src/mono/mono/metadata/assembly.c:1673, condition `
' not met
针对你描述的「新项目正常、中型项目调用注入HttpClient即触发错误,且未进入请求方法就抛异常」的情况,可按以下步骤排查:
检查HttpClient注册与配置
确认Program.cs中HttpClient的注册逻辑,比如是否使用AddHttpClient时绑定了自定义的HttpMessageHandler,或注册顺序与其他服务冲突。尝试简化注册逻辑,暂时移除自定义Handler,改为基础注册:builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });测试是否还触发错误。
排查NuGet包兼容性
中型项目往往有更多第三方依赖,优先排查最近新增的NuGet包,逐个移除后测试;或直接将所有包更新至.NET 8兼容的最新稳定版。重点关注涉及HTTP请求、反射、动态程序集加载的包,这类包容易与Mono运行时产生冲突。关闭Blazor链接器测试
Blazor WASM默认的链接器可能误裁剪了HttpClient依赖的必要代码,在项目.csproj文件中添加以下配置,关闭链接器后重新构建:<PropertyGroup> <BlazorWebAssemblyEnableLinking>false</BlazorWebAssemblyEnableLinking> </PropertyGroup>如果错误消失,说明是链接器裁剪导致,需进一步配置链接器保留相关程序集(可通过
Linker.xml文件指定)。开启Mono调试日志
在浏览器控制台执行以下命令,开启Mono详细日志,获取错误触发时的更多上下文:localStorage.setItem('MONO_LOG_LEVEL', 'debug');刷新页面后重新触发错误,查看控制台输出的详细日志,定位具体是哪个程序集加载或初始化环节出问题。
清理项目缓存
删除项目的bin、obj文件夹,执行dotnet nuget locals all --clear清理NuGet缓存,然后重新构建项目,排除缓存损坏导致的异常。检查服务生命周期冲突
确认是否在单例服务中注入了Scoped生命周期的HttpClient。Blazor WASM中HttpClient默认是Scoped,若在单例服务中直接注入,会导致生命周期不匹配,触发运行时异常。排查动态程序集加载逻辑
错误来自Mono的程序集加载模块,若项目中有反射加载程序集、插件化逻辑,需检查这类代码是否在HttpClient初始化前触发,或加载了不兼容的程序集。
内容的提问来源于stack exchange,提问作者Dsmufsemfisajd

