解决升级.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
评论