You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8 Blazor WASM中Mono断言失败问题求助

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 12:05:54