解决升级.NET10 RC2后Blazor中[MONO] * Assertion at /__w/1/s/src/runtime/src/mono/mono/metadata/assembly.c:2718, condition `<disabled>' not met错误

!图文无关

😕 项目升级到.NET 10 RC2后,就一直在排错,一直以为是项目结构或者代码的问题,排查了几天,问题最终还是指向微软的新SDK版本。

👀️ 原因是微软在.net 10中修改了blazor的加载策略,采用资源指纹的方式来加载静态资源,但是出现了bug,导致资源加载过程报错,错误在浏览器控制台输出如下

dotnet.runtime.fn94ls2wwa.js:3 
 [MONO] * Assertion at /__w/1/s/src/runtime/src/mono/mono/metadata/assembly.c:2718, condition `<disabled>' not met
Error
    at Mc (http://localhost:60463/_framework/dotnet.runtime.fn94ls2wwa.js:3:172298)
    at http://localhost:60463/_framework/dotnet.native.1opz0tyur6.wasm:wasm-function[12373]:0x20e1d0
    at http://localhost:60463/_framework/dotnet.native.1opz0tyur6.wasm:wasm-function[926]:0x3f32a
    at http://localhost:60463/_framework/dotnet.native.1opz0tyur6.wasm:wasm-function[831]:0x3d63c
    at http://localhost:60463/_framework/dotnet.native.1opz0tyur6.wasm:wasm-function[835]:0x3d75e
    at http://localhost:60463/_framework/dotnet.native.1opz0tyur6.wasm:wasm-function[837]:0x3d7a1
    at http://localhost:60463/_framework/dotnet.native.1opz0tyur6.wasm:wasm-function[836]:0x3d774
    at http://localhost:60463/_framework/dotnet.native.1opz0tyur6.wasm:wasm-function[1695]:0x62fe5
    at http://localhost:60463/_framework/dotnet.native.1opz0tyur6.wasm:wasm-function[1602]:0x5be5b
    at http://localhost:60463/_framework/dotnet.native.1opz0tyur6.wasm:wasm-function[4286]:0xd56de
dotnet.runtime.fn94ls2wwa.js:3 
 MONO_WASM: mono_wasm_load_runtime () failed [object Object]
dotnet.runtime.fn94ls2wwa.js:3 
 Uncaught (in promise) 
ExitStatus
dotnet.runtime.fn94ls2wwa.js:3 
 Uncaught (in promise) 
ExitStatus
blazor.web.911ktl676v.js:1 
 Uncaught (in promise) 
ExitStatus

👎 最可气的是,这个问题在build调试阶段没有问题,但是发布后再启动就报错。这也导致问题排查增加了许多困难。

问题复现也很简单,只要发布blazor项目就会出现,这也侧面反映了微软最近的开发质量真心不行,这么明显的问题都会带到新版本。

该问题在Github中,有不少用户反馈,最新的解决方案是暂时弃用指纹资源加载策略。

在项目文件.csproj添加

<PropertyGroup>
  <WasmFingerprintAssets>false</WasmFingerprintAssets>
</PropertyGroup>

重新发布即可解决。

问题参考:https://github.com/dotnet/aspnetcore/issues/63970