.NET 8项目构建后生成Swagger JSON遇MSB3073错误求助
问题:.NET 8项目构建后生成Swagger JSON文件失败(MSB3073错误)
问题详情
- 环境:.NET 8,Swashbuckle.AspNetCore 6.5
- 需求:API构建完成后自动生成OpenAPI规范JSON文件
- 执行错误:添加PostBuild脚本后,构建时抛出
MSB3073 命令“dotnet swagger tofile --output swagger_v1.json bin\Debug\net6.0\TestSwaggerGenWithDotnetSix.dll v1”以代码1退出 - 已尝试方案:降级Swashbuckle到6.4、参考Stack Overflow相关方案均无效;因Azure构建管道无文件写入权限,无法通过代码中
File.Write方式生成文件;移除脚本后项目可正常运行,SwaggerGen及UI配置正常。
已添加的.csproj脚本
<Target Name="PostBuild" AfterTargets="PostBuildEvent"> <Exec Command="dotnet tool restore"></Exec> <Exec Command="dotnet swagger tofile --output swagger_v1.json $(OutputPath)$(AssemblyName).dll v1" /> </Target>
Swagger配置代码
builder.Services.AddSwaggerGen(opt => { opt.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo { Title = "v1", Version = "v1" }); });
解决方案
1. 修正Target执行时机与路径变量
- 将
AfterTargets="PostBuildEvent"改为AfterTargets="Build",确保在构建完全完成后执行脚本,避免输出文件未生成的问题 - 确认
$(OutputPath)指向.NET 8的输出目录(默认是bin\Debug\net8.0\),避免出现脚本中误写的net6.0路径问题 - 调整后的脚本:
<Target Name="PostBuildGenerateSwagger" AfterTargets="Build"> <Exec Command="dotnet tool restore" /> <Exec Command="dotnet swagger tofile --output swagger_v1.json $(OutputPath)$(AssemblyName).dll v1" /> </Target>
2. 确保Swashbuckle CLI工具安装正确
- 全局安装工具:执行
dotnet tool install -g Swashbuckle.AspNetCore.Cli,保证构建环境能找到该工具 - 若使用本地工具,在项目根目录执行
dotnet tool install Swashbuckle.AspNetCore.Cli,生成.config/dotnet-tools.json文件,确保构建时工具可被识别
3. 排查文档名称与错误详情
- 确认Swagger配置中的文档名称
"v1"与命令中的v1完全一致(区分大小写) - 在命令中添加
--verbose参数获取详细错误日志,定位具体问题:
dotnet swagger tofile --verbose --output swagger_v1.json $(OutputPath)$(AssemblyName).dll v1
4. Azure构建管道适配
- 确保管道使用.NET 8 SDK版本执行构建
- 若使用微软托管代理,在管道步骤中添加
dotnet tool install Swashbuckle.AspNetCore.Cli命令,保证工具可用 - 将输出路径指定到管道允许写入的目录,例如
$(Build.ArtifactStagingDirectory)/swagger_v1.json,方便后续发布或归档
内容的提问来源于stack exchange,提问作者Shashank Shukla
相关产品推荐
相关产品推荐

