.NET 10安装后.NET 9 Blazor项目blazor.server.js报404求助
解决方案:.NET10环境下.NET9 Blazor Server项目
blazor.server.js 404问题 问题核心
你的情况是典型的多SDK环境下,高版本SDK接管低版本目标框架项目构建导致的兼容性问题。.NET10调整了Blazor资源的托管逻辑,当系统中存在.NET10 SDK时,即使项目目标是.NET9,构建工具会默认使用最新SDK处理,导致资源路径生成规则与旧项目配置不匹配,触发404错误。
修复步骤
1. 锁定项目使用的SDK版本
在项目根目录创建/修改global.json文件,强制指定使用.NET9 SDK,避免被.NET10接管:
{ "sdk": { "version": "9.0.100", "rollForward": "disable" } }
version填写你安装的.NET9 SDK具体版本(可通过dotnet --list-sdks命令查看)rollForward: disable确保不会自动升级到更高版本SDK
2. 验证并修正资源引用与中间件配置
- 打开
_Host.cshtml,确认blazor.server.js的引用路径为.NET9标准格式:<script src="_framework/blazor.server.js"></script> - 检查
Program.cs中的中间件顺序,确保静态文件与Blazor中间件的顺序正确:var builder = WebApplication.CreateBuilder(args); // 添加服务... var app = builder.Build(); // 静态文件托管必须在Blazor中间件之前 app.UseStaticFiles(); app.UseRouting(); // Blazor Hub与路由配置 app.MapBlazorHub(); app.MapFallbackToPage("/_Host"); app.Run();
3. 清理构建缓存
- 删除项目目录下的
bin和obj文件夹 - 执行命令清理NuGet缓存:
dotnet nuget locals all --clear - 重新编译运行项目,排除旧构建残留的影响
4. 明确项目框架配置
在项目的.csproj文件中添加以下配置,强化目标框架的绑定:
<PropertyGroup> <TargetFramework>net9.0</TargetFramework> <RuntimeFrameworkVersion>9.0.0</RuntimeFrameworkVersion> <DisableSdkAutoLoading>true</DisableSdkAutoLoading> </PropertyGroup>
RuntimeFrameworkVersion强制指定运行时版本DisableSdkAutoLoading禁止自动加载更高版本SDK
补充说明
你提到有的.NET9项目能正常运行,大概率是这些项目已经配置了global.json,或者资源路由、中间件设置恰好兼容.NET10的规则。而大型项目通常存在更多自定义配置(比如第三方组件、静态资源路由重写等),更容易受到SDK版本变更的影响。
内容的提问来源于stack exchange,提问作者Alkampfer
相关产品推荐
相关产品推荐

