J'utilise la netstandard2.1
bibliothèque dans mon netcoreapp3.0
application Web. Lors de l'ajout de mon service Startup
, j'obtiens l'erreur ci-dessous:
'Impossible de charger le type' Microsoft.AspNetCore.Mvc.MvcJsonOptions 'de l'assembly' Microsoft.AspNetCore.Mvc.Formatters.Json, Version = 3.0.0.0
J'utilise également certaines fonctionnalités du Microsoft.AspNetCore.Mvc
package 2.2.0 dans ma bibliothèque de classes.
Voici ma bibliothèque .csproj
,
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
</ItemGroup>
</Project>
Voici ma ServiceExtensions
classe de ma bibliothèque,
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;
}
}
Voici ma ConfigureLibraryOptions
classe,
public class ConfigureLibraryOptions : IConfigureOptions<MvcOptions>
{
public void Configure(MvcOptions options)
{
options.ModelBinderProviders.Insert(0, new CustomBinderProvider());
}
}
Voici le ConfigureServices
de Startup
,
services.AddControllersWithViews().AddMyLibrary();
Veuillez expliquer pourquoi je reçois cette erreur et vous aider à résoudre ce problème.
netstandard2.1
la bibliothèque de classes en référence àMicrosoft.AspNetCore.Mvc
2.2.0 dansnetcoreapp3.0
? Au lieu de cela , je devrais changernetstandard2.1
pournetcoreapp3.0
et ajouter unFrameworkReference
àMicrosoft.AspNetCore.App
?Je ne sais pas si cela résout le problème de l'OP, mais cette erreur se produit également lorsque vous utilisez Swashbuckle 4 dans .Net Core 3. La solution consiste à utiliser Swashbuckle 5. ie
Ensuite, vous devrez le mettre à niveau dans Startup.cs. En général, cela implique le préfixage des classes qui ne compilent pas avec
OpenApi
par exempleoptions.SwaggerDoc("v1" new Info ...
devient
options.SwaggerDoc("v1", OpenApiInfo
aussi
OpenApiSecurityScheme
devientApiKeyScheme
Voir également les documents sur https://github.com/domaindrivendev/Swashbuckle.AspNetCore
la source
Version
de l'objetOpenApiInfo
indique qu'il est OBLIGATOIRE d'être défini. Si je saute la définition, tout fonctionne, à part le fait de ne pas avoir 2 étiquettes spéciales imprimées à côté du nom de mon application dans l'interface utilisateur générée par le swagger (l'une contient la version que nous avons omise, l'autreOAS3
. Qu'est-ce que cela signifie?). Pourquoi est-elle requise et que signifions-nous avec elle? Dans les documents que vous avez liés, il est défini commev1
. Si cela devait rester comme ça, ou n'est-ce qu'un simple exemple - nous devrions plutôt y stocker la version de notre application. Cela peut être n'importe quoi, comme0.0.1a-ffg
netstandard2.1 à netcoreapp3.0 MvcJsonOptions -> MvcNewtonsoftJsonOptions
la source