.NET 2.1升级至3.1遇StaticFileMiddleware构造方法找不到错误
问题分析
这个错误的核心原因是Swashbuckle.AspNetCore.SwaggerUI v4.0.1与.NET Core 3.1的静态文件中间件API不兼容。.NET Core 3.1对StaticFileMiddleware的构造函数签名做了关键变更:
- .NET Core 2.1中构造函数依赖
IHostingEnvironment,而3.1版本已将其替换为IWebHostEnvironment - 构造函数的参数顺序、依赖项组合也有调整,导致旧版本Swashbuckle无法找到匹配的构造方法
解决方案
虽然有部分说法称无需升级Swashbuckle,但v4.0.1是针对.NET Core 2.x开发的版本,必须升级到适配.NET Core 3.1的版本才能解决该问题:
- 升级Swashbuckle.AspNetCore相关包至v5.6.3(这是适配.NET Core 3.1的稳定版本)
在项目的.csproj文件中更新PackageReference:<PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" /> <PackageReference Include="Swashbuckle.AspNetCore.Swagger" Version="5.6.3" /> <PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="5.6.3" /> - 清理并重建项目,消除缓存依赖
执行以下命令:dotnet clean dotnet restore dotnet build - 检查
Startup.cs中的Swagger配置(可选)
如果代码中直接依赖了IHostingEnvironment,将其替换为.NET Core 3.1推荐的IWebHostEnvironment,其余AddSwaggerGen、UseSwaggerUI的调用逻辑无需大幅修改
补充排查步骤
若升级后仍存在问题,可通过以下命令查看项目的依赖树,排查是否有其他包引用了旧版本的Microsoft.AspNetCore.StaticFiles,排除版本冲突:
dotnet list package --include-transitive
内容的提问来源于stack exchange,提问作者NEERUGANTI JAGADEESH
相关产品推荐
相关产品推荐

