MacOS环境Visual Studio 2022预览版1 .NET 6项目打开Swagger报错如何解决
报错原因
该报错是Swashbuckle.AspNetCore 包版本与当前使用的 .NET 6 早期预览版框架不兼容导致的:
你使用的 Visual Studio 2022 预览版1对应早期的 .NET 6 预览版本,其内置的 Microsoft.AspNetCore.Http.Abstractions 程序集中尚未加入 Microsoft.AspNetCore.Http.Metadata.ITagsMetadata 类型。而你当前安装的 Swashbuckle.AspNetCore 版本适配的是 .NET 6 正式版及更高版本,默认实现依赖该类型,调用时就会抛出 TypeLoadException 异常。
解决方法
你可以根据自己的实际场景选择任意一种方案处理:
- 方案1:升级开发环境和框架版本。将 Visual Studio 2022 升级到正式版,同时将项目的 .NET 6 运行环境升级为正式发布版,Swashbuckle.AspNetCore 保持 6.x 正式版本即可正常适配。
- 方案2:降级 Swashbuckle.AspNetCore 包版本。如果暂时无法升级开发环境,可将项目中安装的 Swashbuckle.AspNetCore 包降级到
6.0.0-preview7及更早的预览版本,该版本的实现未依赖 ITagsMetadata 类型,可兼容当前的 .NET 6 预览版环境。 - 方案3:自定义 Swagger 标签选择逻辑。如果不想降级 Swagger 包,可在注册 Swagger 生成服务时手动替换默认的标签选择器,绕开对 ITagsMetadata 的依赖,示例配置如下:
// .NET 6 极简风格 Program.cs 示例 builder.Services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new OpenApiInfo { Title = "项目API", Version = "v1" }); // 重写标签选择逻辑,直接用控制器名作为分组标签,不调用默认实现 options.TagsSelector = apiDescription => new[] { apiDescription.ActionDescriptor.RouteValues["controller"] }; });
内容的提问来源于stack exchange,提问作者Chanaka Amarasinghe
相关产品推荐
相关产品推荐

