.NET 6环境下不运行项目X获取Swagger文档的问题咨询
看起来你在.NET 6环境里,想不用启动项目X就导出它的Swagger文档,明明已经装了全局工具却还是踩了坑,我来帮你捋捋几个可能的解决方向:
先试试最容易忽略的小操作:重启你的终端
有时候装完全局工具后,终端的环境变量没有即时刷新——哪怕dotnet tool list --global能看到工具,实际调用时还是会找不到命令。先关掉当前的终端窗口,重新打开一个再试一次原命令,说不定就解决了。确认命令里的DLL路径和版本匹配度
你用的dotnet swagger tofile --output swagger.json [dllPath] v1里,[dllPath]一定要是项目X构建后生成的Web项目DLL的正确路径,比如bin/Debug/net6.0/YourProjectX.dll,别写错项目名或者路径层级。另外要重点注意:你装的swashbuckle.aspnetcore.cli全局工具版本,要和项目X里引用的Swashbuckle.AspNetCoreNuGet包版本大版本保持一致(比如项目里是6.x,工具也要是6.x),版本不兼容很容易出现调用失败:- 先卸载现有工具:
dotnet tool uninstall --global swashbuckle.aspnetcore.cli - 查看项目X的NuGet包管理器里
Swashbuckle.AspNetCore的具体版本,比如6.4.0 - 安装对应版本的工具:
dotnet tool install --global swashbuckle.aspnetcore.cli --version 6.4.0
- 先卸载现有工具:
换个思路:在项目X里加个构建时自动生成Swagger的任务
要是全局工具的方式一直卡壳,不如直接在项目X的.csproj文件里加一段构建目标,让每次构建项目时自动导出Swagger JSON,不用手动跑命令:
打开项目X的.csproj,在<Project>标签内添加这段代码:<Target Name="GenerateSwagger" AfterTargets="Build"> <Exec Command="dotnet swagger tofile --output $(OutputPath)swagger.json $(OutputPath)$(AssemblyName).dll v1" /> </Target>然后在项目X的根目录运行
dotnet build,构建完成后就能在bin/Debug/net6.0(或Release目录)里找到生成好的swagger.json了。最后再确认DLL的类型
要确保你指定的DLL是项目X的Web应用程序DLL,而不是普通类库DLL——只有Web项目里才会包含Swagger的配置代码(比如AddSwaggerGen、UseSwagger这些),类库DLL是生成不了Swagger文档的哦。
内容来源于stack exchange

