Estoy usando la netstandard2.1
biblioteca en mi netcoreapp3.0
aplicación web. Al agregar mi servicio Startup
, recibo el siguiente error:
'No se pudo cargar el tipo' Microsoft.AspNetCore.Mvc.MvcJsonOptions 'del ensamblado' Microsoft.AspNetCore.Mvc.Formatters.Json, Version = 3.0.0.0
También estoy usando algunas funciones de Microsoft.AspNetCore.Mvc
paquete 2.2.0 en mi biblioteca de clases.
Aquí está mi biblioteca .csproj
,
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
</ItemGroup>
</Project>
Aquí está mi ServiceExtensions
clase de mi biblioteca,
public static class ServiceExtensions
{
public static IMvcBuilder AddMyLibrary(this IMvcBuilder builder)
{
builder.Services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.AddJsonOptions(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});
builder.Services.ConfigureOptions<ConfigureLibraryOptions>();
return builder;
}
}
Aquí está mi ConfigureLibraryOptions
clase
public class ConfigureLibraryOptions : IConfigureOptions<MvcOptions>
{
public void Configure(MvcOptions options)
{
options.ModelBinderProviders.Insert(0, new CustomBinderProvider());
}
}
Aquí es el ConfigureServices
de Startup
,
services.AddControllersWithViews().AddMyLibrary();
Por favor, ayuda sobre por qué recibo este error y cómo solucionarlo.
netstandard2.1
la biblioteca de clases con referencia aMicrosoft.AspNetCore.Mvc
2.2.0 innetcoreapp3.0
? En cambio, ¿debería cambiar elnetstandard2.1
tonetcoreapp3.0
y agregar unFrameworkReference
toMicrosoft.AspNetCore.App
?No estoy seguro de si esto resuelve el problema de OP, pero este error también ocurre cuando usa Swashbuckle 4 en .Net Core 3. La solución es usar Swashbuckle 5. es decir
Luego deberá actualizarlo en Startup.cs. En general, eso implica prefijar clases que no se compilan con,
OpenApi
por ejemplo,options.SwaggerDoc("v1" new Info ...
se convierte
options.SwaggerDoc("v1", OpenApiInfo
También se
OpenApiSecurityScheme
convierteApiKeyScheme
Consulte también los documentos en https://github.com/domaindrivendev/Swashbuckle.AspNetCore
fuente
Version
del objetoOpenApiInfo
indica que se REQUIERE que se defina. Si omito definirlo, todo funciona, aparte de no tener 2 etiquetas especiales impresas junto al nombre de mi aplicación en la interfaz de usuario generada por el swagger (una contiene la versión que hemos omitido, la otraOAS3
. ¿Qué significa?). ¿Por qué es obligatorio y qué significamos con él? En los documentos que vinculó, se define comov1
. Si se mantiene así, o es solo un ejemplo, deberíamos almacenar la versión de nuestra aplicación allí. Puede ser cualquier cosa, como0.0.1a-ffg
netstandard2.1 a netcoreapp3.0 MvcJsonOptions -> MvcNewtonsoftJsonOptions
fuente