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.AspNetCore6.5.0 或更高版本

这是最直接、最有效的解决方式。

Swashbuckle.AspNetCore 版本过高 也不行

Swashbuckle.AspNetCore 版本过高 是导致你遇到 MissingMethodException根本原因

🔥 核心问题:Swashbuckle.AspNetCore 8.1.4 不兼容 .NET 6.0