无法从程序集中加载类型“ Swashbuckle.AspNetCore.Swagger.SwaggerDocument”

问题描述

此刻,我正尝试将项目从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。

尝试以下步骤。

  1. 转到项目根目录
  2. 打开控制台
  3. 创建清单文件

dotnet new tool-manifest  

  1. 列表项

安装 5.6.3 CLI

dotnet tool install --version 5.6.3 Swashbuckle.AspNetCore.Cli

  1. 生成 swagger 输出文件。 {用您的 ProjectName.dll 替换 Project}

dotnet swagger tofile --output swagger.json bin/Debug/netcoreapp3.1/Project.dll v1