执行dotnet swagger tofile时项目启动,如何不运行项目生成Swagger文档?
解决无需运行服务生成Swagger文档的问题
问题根源
你当前的配置未指定命令执行时机,导致构建流程误触发了服务启动逻辑;同时裸写的<Exec>标签可能存在dll路径定位偏差,使得文档生成命令未正确执行。
解决方案
方案1:在csproj中绑定正确的构建目标
把Swagger生成命令包裹在AfterBuild目标里,确保编译完成后立刻执行文档生成逻辑,不会触发服务启动:
<Target Name="GenerateSwaggerDocumentation" AfterTargets="Build"> <!-- 还原Swagger CLI工具 --> <Exec Command="dotnet tool restore" /> <!-- 从编译输出的dll生成Swagger文档,用$(OutputPath)变量自动定位正确路径 --> <Exec Command="dotnet swagger tofile --output myoutputfile.xml $(OutputPath)\myawesomecode.dll v1" /> </Target>
替换你原来的裸<Exec>代码后,执行dotnet build只会完成编译+生成文档,不会启动服务。
方案2:先发布再生成文档(彻底脱离运行依赖)
如果不想修改csproj,也可以先发布项目,再从发布目录的dll生成文档,完全不需要启动服务:
# 先以Release模式发布项目 dotnet publish -c Release # 从发布后的dll生成Swagger文档,将netX.X替换为你的实际.NET版本 dotnet swagger tofile --output myoutputfile.xml ./bin/Release/netX.X/publish/myawesomecode.dll v1
额外注意点
- 确认
myawesomecode.dll是你的Web项目输出dll,使用$(OutputPath)变量可避免硬编码路径出错。 - 执行构建时务必用
dotnet build命令,不要用dotnet run(后者本身就会启动服务)。
内容的提问来源于stack exchange,提问作者Mr Giggles
相关产品推荐
相关产品推荐

