You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:54:04