ASP.NET托管Blazor WASM升级.NET 6后Hot Reload触发空引用异常问题
Blazor WASM .NET 6 Hot Reload空引用错误解决方案
完整报错堆栈:
Error: System.NullReferenceException: Object reference not set to an instance of an object. at Microsoft.AspNetCore.Components.WebAssembly.HotReload.WebAssemblyHotReload.ApplyHotReloadDelta(String moduleIdString, Byte[] metadataDelta, Byte[] ilDeta) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) --- End of stack trace from previous location --- at Microsoft.JSInterop.Infrastructure.DotNetDispatcher.InvokeSynchronously(JSRuntime jsRuntime, DotNetInvocationInfo& callInfo, IDotNetObjectReference objectReference, String argsJson) at Microsoft.JSInterop.Infrastructure.DotNetDispatcher.Invoke(JSRuntime jsRuntime, DotNetInvocationInfo& invocationInfo, String argsJson) at Microsoft.AspNetCore.Components.WebAssembly.Services.DefaultWebAssemblyJSRuntime.InvokeDotNet(String assemblyName, String methodIdentifier, String dotNetObjectId, String argsJson) at Object._convert_exception_for_method_call (https://localhost:44362/_framework/dotnet.6.0.0.qme34vl4fz.js:1:178709) at Object._handle_exception_for_call (https://localhost:44362/_framework/dotnet.6.0.0.qme34vl4fz.js:1:180678) at managed__Microsoft_AspNetCore_Components_WebAssembly__Microsoft_AspNetCore_Components_WebAssembly_Services_DefaultWebAssemblyJSRuntime_InvokeDotNet at Object.invokeDotNetFromJS (https://localhost:44362/_framework/blazor.webassembly.js?version=32330328618b4ff08635274a6f31248c:1:42078) at g (https://localhost:44362/_framework/blazor.webassembly.js?version=32330328618b4ff08635274a6f31248c:1:1618) at Object.e.invokeMethod (https://localhost:44362/_framework/blazor.webassembly.js?version=32330328618b4ff08635274a6f31248c:1:2665) at Object.St.Te._internal.applyHotReload (https://localhost:44362/_framework/blazor.webassembly.js?version=32330328618b4ff08635274a6f31248c:1:56100) at https://localhost:44362/_framework/aspnetcore-browser-refresh.js:136:33 at Array.forEach () at applyBlazorDeltas (https://localhost:44362/_framework/aspnetcore-browser-refresh.js:134:12)
该问题是.NET 5升级.NET 6后配置不匹配、编译缓存残留导致的常见问题,按以下步骤排查修复:
- 统一所有依赖包版本
检查Client、Server、Shared三个项目的全部NuGet依赖,确保所有Microsoft.AspNetCore.*、Microsoft.Components.*相关包的版本完全一致,且均为6.0.x正式版,不存在5.x版本的残留包。 - 清理全量编译缓存
手动删除所有项目根目录下的bin、obj文件夹,删除ASP.NET Core托管Server项目的.vs隐藏文件夹,同时清理浏览器缓存,或按Ctrl+F5强制刷新页面加载最新的wasm资源。 - 校验项目配置文件
打开Blazor WASM Client项目的.csproj文件,确认包含以下配置属性:
再打开Server项目的<PropertyGroup> <TargetFramework>net6.0</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> <UseBlazorWebAssembly>true</UseBlazorWebAssembly> </PropertyGroup>Properties/launchSettings.json,确认运行配置中包含Hot Reload相关配置:"profiles": { "http": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "applicationUrl": "http://localhost:5000", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, "hotReloadProfile": "blazorwasm" }, // https配置也要添加相同的hotReloadProfile属性 } - 校验中间件配置
确认Server项目的Program.cs在开发环境下已按正确顺序添加WebAssembly调试中间件:if (app.Environment.IsDevelopment()) { app.UseWebAssemblyDebugging(); // 其余开发环境专属中间件 } - 重新运行项目
完成上述配置后,先执行dotnet restore还原依赖,再通过VS2022启动或者运行dotnet watch run即可正常使用Hot Reload功能。
内容的提问来源于stack exchange,提问作者MBeckius
相关产品推荐
相关产品推荐

