.NET 6项目构建未生成Swagger静态swagger.json/yaml文件问题问询
.NET 6项目构建未生成静态Swagger文件问题修复
你当前的配置存在两个核心问题,会直接导致静态Swagger文件无法生成:
- 环境判断逻辑写反:你把
app.UseSwagger()和app.UseSwaggerUI()放在了!app.Environment.IsDevelopment()分支里,默认本地执行dotnet run、VS启动调试时默认加载的是Development环境,这段Swagger挂载逻辑根本不会执行,应用启动后根本没有可用的Swagger端点,自然没法生成静态文件。 - 基础Swagger配置默认不支持构建自动生成静态文件:默认引入的Swashbuckle主包只提供运行时的Swagger端点能力,不会在build阶段自动输出json/yaml文件,需要额外配置CLI工具和生成规则。
修复步骤
1. 修正Program.cs配置
把Swagger中间件从非开发环境分支移出来,保证运行时可以正常访问Swagger端点,修正后的代码如下:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app = builder.Build(); // Swagger中间件移到环境判断外,所有环境都可用,也可以单独加IsDevelopment判断仅开发环境启用 app.UseSwagger(); app.UseSwaggerUI(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();
改完后先启动项目,访问/swagger/v1/swagger.json确认能正常返回接口文档内容,这是生成静态文件的前提。
2. 安装Swagger CLI工具实现静态文件生成
- 首先在项目根目录打开终端,执行命令安装对应版本的Swashbuckle CLI工具:
dotnet tool install --version 6.4.0 Swashbuckle.AspNetCore.Cli --global - 方式一:手动导出静态文件
项目构建完成后,在项目根目录执行对应命令即可导出指定格式的静态文件:
导出swagger.json:dotnet swagger tofile --output ./swagger.json ./bin/Debug/net6.0/你的项目程序集名称.dll v1
导出swagger.yaml:dotnet swagger tofile --yaml --output ./swagger.yaml ./bin/Debug/net6.0/你的项目程序集名称.dll v1 - 方式二:配置项目构建时自动生成
右键项目编辑csproj文件,在</Project>标签前加入如下构建目标配置,之后每次执行dotnet build或VS点击构建都会自动在输出目录生成静态Swagger文件:
<Target Name="GenerateSwaggerDoc" AfterTargets="Build"> <Exec Command="dotnet swagger tofile --output $(OutputPath)/swagger.json $(OutputPath)/$(AssemblyName).dll v1" /> <Exec Command="dotnet swagger tofile --yaml --output $(OutputPath)/swagger.yaml $(OutputPath)/$(AssemblyName).dll v1" /> </Target>
注意:如果本地安装CLI后执行命令提示找不到dotnet swagger,关闭当前终端重新打开再执行即可。
内容的提问来源于stack exchange,提问作者Sam Jones
相关产品推荐
相关产品推荐

