使用 .NET Core 3.0 添加 swagger 时出现异常
Exception when adding swagger with .NET Core 3.0
我正在尝试将 swagger 集成到 ASP NET Core 3.0
项目中,它在 ConfigureServices
方法中抛出异常:
我正在使用 Swashbuckle.AspNetCore
4.0.1.
这个我也查过了 and also this
public void ConfigureServices(IServiceCollection services)
{
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Swashbuckle.AspNetCore.Swagger.Info
{
Version = "v1",
Title = " API",
Description="API for the Server",
});
});
}
异常
System.AggregateException
HResult=0x80131500
Message=Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: Swashbuckle.AspNetCore.Swagger.ISwaggerProvider Lifetime: Transient ImplementationType: Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator': Failed to compare two elements in the array.) (Error while validating the service descriptor 'ServiceType: Swashbuckle.AspNetCore.SwaggerGen.ISchemaRegistryFactory Lifetime: Transient ImplementationType: Swashbuckle.AspNetCore.SwaggerGen.SchemaRegistryFactory': Failed to compare two elements in the array.)
Source=Microsoft.Extensions.DependencyInjection
StackTrace:
at Microsoft.Extensions.DependencyInjection.ServiceProvider..ctor(IEnumerable`1 serviceDescriptors, ServiceProviderOptions options)
at Microsoft.Extensions.DependencyInjection.ServiceCollectionContainerBuilderExtensions.BuildServiceProvider(IServiceCollection services, ServiceProviderOptions options)
at Microsoft.Extensions.DependencyInjection.DefaultServiceProviderFactory.CreateServiceProvider(IServiceCollection containerBuilder)
at Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter`1.CreateServiceProvider(Object containerBuilder)
at Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider()
at Microsoft.Extensions.Hosting.HostBuilder.Build()
at SXS.Server.Program.Main(String[] args) in C:\Work\SXS\SXS\Core\Server\SXS.Server\Program.cs:line 32
Inner Exception 1:
InvalidOperationException: Error while validating the service descriptor 'ServiceType: Swashbuckle.AspNetCore.Swagger.ISwaggerProvider Lifetime: Transient ImplementationType: Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator': Failed to compare two elements in the array.
Inner Exception 2:
InvalidOperationException: Failed to compare two elements in the array.
Inner Exception 3:
TypeLoadException: Could not load type 'Microsoft.AspNetCore.Mvc.MvcJsonOptions' from assembly 'Microsoft.AspNetCore.Mvc.Formatters.Json, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.
P.S 我遵循了这个 guide 唯一的区别是当他使用 OpenApiInfo
对象时我没有那个过载可用,因此我正在使用 Info
.
我刚刚在 docs.microsoft.com 完成了 Get started with Swashbuckle and ASP.NET Core,没遇到任何问题。
文档说明您需要使用Swashbuckle.AspNetCore的最新预览版,5.0.0-rc4
这通常是由于使用了错误的 swagger 包,因此信息 api 使用了 Swashbuckle.AspNetCore.Swagger.Info,这导致了问题。
如果您使用最新的 Swashbuckle.AspNetCore、5.0.0-rc4m 包,那么它将从新的 Microsoft.OpenApi.Models 中获取 OpenApiInfo,然后它就会工作。
编码愉快!
我试过了,效果很好:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Version = "v1",
Title = "My API",
Description = "My API description for blah blah"
});
});
顺便说一句,我正在使用 .Net Core 2.1
我在使用 .Net Core 3.1.2 和 Swagger 5.4.1 时遇到了这个问题。
原来我忘了将 services.AddControllers();
添加到我的 Startup::ConfigureServices
方法中。
我只是添加了 Razor Pages。
我正在尝试将 swagger 集成到 ASP NET Core 3.0
项目中,它在 ConfigureServices
方法中抛出异常:
我正在使用 Swashbuckle.AspNetCore
4.0.1.
这个我也查过了
public void ConfigureServices(IServiceCollection services)
{
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Swashbuckle.AspNetCore.Swagger.Info
{
Version = "v1",
Title = " API",
Description="API for the Server",
});
});
}
异常
System.AggregateException
HResult=0x80131500
Message=Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: Swashbuckle.AspNetCore.Swagger.ISwaggerProvider Lifetime: Transient ImplementationType: Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator': Failed to compare two elements in the array.) (Error while validating the service descriptor 'ServiceType: Swashbuckle.AspNetCore.SwaggerGen.ISchemaRegistryFactory Lifetime: Transient ImplementationType: Swashbuckle.AspNetCore.SwaggerGen.SchemaRegistryFactory': Failed to compare two elements in the array.)
Source=Microsoft.Extensions.DependencyInjection
StackTrace:
at Microsoft.Extensions.DependencyInjection.ServiceProvider..ctor(IEnumerable`1 serviceDescriptors, ServiceProviderOptions options)
at Microsoft.Extensions.DependencyInjection.ServiceCollectionContainerBuilderExtensions.BuildServiceProvider(IServiceCollection services, ServiceProviderOptions options)
at Microsoft.Extensions.DependencyInjection.DefaultServiceProviderFactory.CreateServiceProvider(IServiceCollection containerBuilder)
at Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter`1.CreateServiceProvider(Object containerBuilder)
at Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider()
at Microsoft.Extensions.Hosting.HostBuilder.Build()
at SXS.Server.Program.Main(String[] args) in C:\Work\SXS\SXS\Core\Server\SXS.Server\Program.cs:line 32
Inner Exception 1:
InvalidOperationException: Error while validating the service descriptor 'ServiceType: Swashbuckle.AspNetCore.Swagger.ISwaggerProvider Lifetime: Transient ImplementationType: Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator': Failed to compare two elements in the array.
Inner Exception 2:
InvalidOperationException: Failed to compare two elements in the array.
Inner Exception 3:
TypeLoadException: Could not load type 'Microsoft.AspNetCore.Mvc.MvcJsonOptions' from assembly 'Microsoft.AspNetCore.Mvc.Formatters.Json, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.
P.S 我遵循了这个 guide 唯一的区别是当他使用 OpenApiInfo
对象时我没有那个过载可用,因此我正在使用 Info
.
我刚刚在 docs.microsoft.com 完成了 Get started with Swashbuckle and ASP.NET Core,没遇到任何问题。
文档说明您需要使用Swashbuckle.AspNetCore的最新预览版,5.0.0-rc4
这通常是由于使用了错误的 swagger 包,因此信息 api 使用了 Swashbuckle.AspNetCore.Swagger.Info,这导致了问题。
如果您使用最新的 Swashbuckle.AspNetCore、5.0.0-rc4m 包,那么它将从新的 Microsoft.OpenApi.Models 中获取 OpenApiInfo,然后它就会工作。
编码愉快!
我试过了,效果很好:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Version = "v1",
Title = "My API",
Description = "My API description for blah blah"
});
});
顺便说一句,我正在使用 .Net Core 2.1
我在使用 .Net Core 3.1.2 和 Swagger 5.4.1 时遇到了这个问题。
原来我忘了将 services.AddControllers();
添加到我的 Startup::ConfigureServices
方法中。
我只是添加了 Razor Pages。