web-dev-qa-db-ja.com

AspNetCoreは、タイプ 'Swashbuckle.AspNetCore.SwaggerGen.SwaggerResponseAttribute'をロードできませんでした

次を使用してswaggerを使用しているASP.NET Core Webアプリケーションがあります。

_public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddSwaggerGen(c =>
    {
        c.OperationFilter<ExamplesOperationFilter>();
        c.OperationFilter<DescriptionOperationFilter>();
        c.SwaggerDoc("v1", new Info
        {
            Version = "v1",
            Title = "API",
            Description = "",
        });
        // Set the comments path for the Swagger JSON and UI.
        var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
        var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
        c.IncludeXmlComments(xmlPath);
    });
}


public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseSwagger();
    app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "API"); });
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseMvc();
}
_

Url/swaggerに移動すると、次のエラーが表示されます。

失敗:Microsoft.AspNetCore.Server.Kestrel [13]接続ID "0HLG1T7PRT05H"、要求ID:未処理の例外がアプリケーションによってスローされました。 System.TypeLoadException:タイプ 'Swashbuckle.AspNetCore.SwaggerGen.SwaggerResponseAttribute'をアセンブリ 'Swashbuckle.AspNetCore.SwaggerGen、Version = 3.0.0.0、Culture = neutral'.at Swashbuckle.AspNetCore.Examples.DescriptionOperationFilter.SetResponseModelDescriptions(Operation操作からロードできませんでした、ISchemaRegistry schemaRegistry、ApiDescription apiDescription)、Swashbuckle.AspNetCore.Examples.DescriptionOperationFilter.Apply(操作操作、OperationFilterContextコンテキスト)Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.CreateOperation(ApiDescription apiDescription、ISchemaRegistry schemaRegistry schemaRegistry schemaRegistry) CreatePathItem(IEnumerable 1 apiDescriptions, ISchemaRegistry schemaRegistry) at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable 1 source、Func _2 keySelector, Func_ 2 elementSelector、IEqualityComparer 1 comparer) at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.CreatePathItems(IEnumerable 1 apiDescriptions、ISchemaRegistry schemaRegistry)Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwagger(String documentName、String Host、StringホストbasePath、String []スキーム)at Swashbuckle.AspNetCore.Swagger .SwaggerMiddleware.Invoke(HttpContext httpContext)at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests [TContext](IHttpApplication`1 application)

私がインストールしたnugetパッケージは次のとおりです。

Swashbuckle.AspNetCore v3.0.0

Swashbuckle.AspNetCore.Examples v2.9.0

5
Yahya Hussein

Swashbuckle.AspNetCoreをv2.5.0にロールバックするとうまくいきました

3
Yahya Hussein

パッケージのアンインストール

Swashbuckle.AspNetCore.Examples

問題を修正する必要があります。新しいパッケージは(まだ試していません)-

Swashbuckle.AspNetCore.Filters

(UPDATE)新しいパッケージは完全に正常に動作します

5
IeuanW

これは、.netcore 3.0にアップグレードするときに機能しました。

1)Install-Package Swashbuckle.AspNetCore-バージョン5.0.0-rc4

2)コードを変更

    public void ConfigureServices(IServiceCollection services)
    {
        ...
        services.AddSwaggerGen(c =>
                {
                    c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebAPI", Version = "v1" });
                });
        ...
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env,ILoggerFactory loggerFactory)
    {
        ...
        app.UseSwagger();
        app.UseSwaggerUI(c =>
        {
            c.RoutePrefix = "swagger/ui";
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebAPI(v1)");
        });
        ...
    }

基本的に、 https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases/tag/v5.0.0-rc4 にある次のサンプル

4
yob

これは、バージョン3のいくつかの重大な変更に関連していました。 ここで詳細を確認できます。

これを修正するには、 Swashbuckle.AspNetCore.Annotationsパッケージ。 を追加してみてください。

Install-Package Swashbuckle.AspNetCore.Annotations -Version 3.0.0

ドットネットコアの場合:

dotnet add package Swashbuckle.AspNetCore.Annotations --version 3.0.0

詳細 v3.0.0のリリースノート

1
Nick Suslov

それ以降のバージョンとASPNET Coreで動作させるには、以下を行う必要があります。

  1. 参照nuget Swashbuckle.AspNetCore.Filters
  2. AddSwaggerGen call ExampleFilters();内(ConfigureServices内)
  3. IExampleProvider<TargetDtoType>に基づいてサンプルクラスを実装します。ここで、TargetDtoTypeはサンプルのターゲットタイプです。
  4. call AddSwaggerExamplesFromAssemblyOf<ExampleTypeImplementation>ここで、ExampleTypeImplementationはIExampleProvider<TargetDtoType>を実装するステップ3のタイプです

これは私のためにトリックをしました。アクションメソッドの属性は必要ありません。スワッシュバックルはパラメータータイプを介して取得し、サンプルを自動的に生成します

0