问题描述
此刻,我正尝试将项目从dotnet 2.1更新到3.1。为了做到这一点并避免出现异常,我不得不升级了swagger,除了swagger之外,其他所有东西都可以工作。由于某些未知原因,当我尝试生成json映射时,Swagger返回此异常。我正在Catalina macO,macBook Pro中进行这些更改。
The command "dotnet swagger tofile --output .\autogenerated-api.json bin/Debug/netcoreapp3.1/App.dll v2" exited with code 134.
...
Unhandled exception. System.TypeLoadException: Could not load type 'Swashbuckle.AspNetCore.Swagger.SwaggerDocument' from assembly 'Swashbuckle.AspNetCore.Swagger,Version=5.6.3.0,Culture=neutral,PublicKeyToken=62657d7474907593'.
at Swashbuckle.AspNetCore.Cli.Program.<>c.<Main>b__0_3(IDictionary`2 namedArgs)
at Swashbuckle.AspNetCore.Cli.CommandRunner.Run(IEnumerable`1 args)
at Swashbuckle.AspNetCore.Cli.CommandRunner.Run(IEnumerable`1 args)
at Swashbuckle.AspNetCore.Cli.Program.Main(String[] args)
到目前为止,我还没有找到有关该异常的任何信息。怎么了?我正在使用最新的Swagger以及非常简单的设置:
<packagereference Include="Swashbuckle.AspNetCore.Swagger" Version="5.6.3" />
<packagereference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="5.6.3" />
<packagereference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="5.6.3" />
...
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="dotnet swagger tofile --output .\autogenerated-api.json $(OutputPath)$(AssemblyName).dll v2" />
以及Startup.cs中的设置:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v2",new OpenApiInfo { Title = "App Api",Version = "v2"});
});
...
if (env.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v2/swagger.json",$"{nameof(App)} API V2");
c.InjectStylesheet("/brand.css");
});
}
这个想法自然是在每次开发运行时生成一个json映射。仍然想知道为什么Swagger试图到达它没有的包(SwaggerDocument)。
谢谢。
解决方法
它可能指向不同版本的 CLI。
尝试以下步骤。
- 转到项目根目录
- 打开控制台
- 创建清单文件
dotnet new tool-manifest
- 列表项
安装 5.6.3 CLI
dotnet tool install --version 5.6.3 Swashbuckle.AspNetCore.Cli
- 生成 swagger 输出文件。 {用您的 ProjectName.dll 替换 Project}
dotnet swagger tofile --output swagger.json bin/Debug/netcoreapp3.1/Project.dll v1