System.MissingMethodExceptionMethodnotfound:VoidMicrosoft.AspNetCore.StaticFiles.StaticFileMiddleware
System.MissingMethodException:“Method not found: 'Void Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware..ctor(Microsoft.AspNetCore.Http.RequestDelegate, Microsoft.AspNetCore.Hosting.IHostingEnvironment, Microsoft.Extensions.Options.IOptions`1<Microsoft.AspNetCore.Builder.StaticFileOptions>, Microsoft.Extensions.Logging.ILoggerFactory)'.”
在使用中间件和swagger Swashbuckle.AspNetCore遇到的问题
误区 Microsoft.AspNetCore.StaticFiles Microsoft.Extensions.FileProviders.Embedded 找出旧依赖是谁带来的 IWebHostEnvironment
System.MissingMethodException:“Method not found: 'Void Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware..ctor(Microsoft.AspNetCore.Http.RequestDelegate, Microsoft.AspNetCore.Hosting.IHostingEnvironment, Microsoft.Extensions.Options.IOptions`1<Microsoft.AspNetCore.Builder.StaticFileOptions>, Microsoft.Extensions.Logging.ILoggerFactory)'.”
这 不是配置问题,而是典型的 .NET 版本与 NuGet 包版本不兼容问题,尤其是在使用了 旧版 Swashbuckle.AspNetCore 时。
这个错误的根源是:
你安装的
Swashbuckle.AspNetCore版本 太旧(如 4.x、5.x 甚至某些 6.0 早期版本),它内部试图调用 ASP.NET Core 2.1 时代的StaticFileMiddleware构造函数。
但在 .NET Core 3.0+ / .NET 5+ / .NET 6+ / .NET 7+ / .NET 8+ 中:
StaticFileMiddleware的构造函数已经被 重写或私有化- 中间件注册方式改为基于
HttpContext和工厂模式 - 旧的构造函数签名 已不存在
所以运行时找不到方法,抛出 MissingMethodException。
正确解决方案(关键!)
✅ 1. 升级 Swashbuckle.AspNetCore 到 6.5.0 或更高版本
这是最直接、最有效的解决方式。
Swashbuckle.AspNetCore 版本过高 也不行
Swashbuckle.AspNetCore 版本过高 是导致你遇到 MissingMethodException 的 根本原因。
🔥 核心问题:Swashbuckle.AspNetCore 8.1.4 不兼容 .NET 6.0