Korzystam z netstandard2.1
biblioteki w mojej netcoreapp3.0
aplikacji internetowej. Podczas dodawania mojej usługi Startup
pojawia się następujący błąd:
„Nie można załadować typu” Microsoft.AspNetCore.Mvc.MvcJsonOptions ”z zestawu„ Microsoft.AspNetCore.Mvc.Formatters.Json, Wersja = 3.0.0.0
Używam również niektórych funkcji z Microsoft.AspNetCore.Mvc
pakietu 2.2.0 w mojej bibliotece klas.
Oto moja biblioteka .csproj
,
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
</ItemGroup>
</Project>
Oto moja ServiceExtensions
klasa z mojej biblioteki,
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;
}
}
Oto moja ConfigureLibraryOptions
klasa
public class ConfigureLibraryOptions : IConfigureOptions<MvcOptions>
{
public void Configure(MvcOptions options)
{
options.ModelBinderProviders.Insert(0, new CustomBinderProvider());
}
}
Oto ConfigureServices
z Startup
,
services.AddControllersWithViews().AddMyLibrary();
Proszę o pomoc, dlaczego otrzymuję ten błąd i pomoc w rozwiązaniu tego problemu?
netstandard2.1
biblioteki klas w odniesieniu doMicrosoft.AspNetCore.Mvc
2.2.0 wnetcoreapp3.0
? Zamiast tego powinien zmienićnetstandard2.1
sięnetcoreapp3.0
i dodaćFrameworkReference
doMicrosoft.AspNetCore.App
?Nie jestem pewien, czy to rozwiązuje problem OP, ale ten błąd występuje również, gdy używasz Swashbuckle 4 w .Net Core 3. Rozwiązaniem jest użycie Swashbuckle 5. tj.
Następnie musisz go uaktualnić w Startup.cs. Ogólnie rzecz biorąc, obejmuje to prefiksowanie klas, które nie kompilują się
OpenApi
npoptions.SwaggerDoc("v1" new Info ...
staje się
options.SwaggerDoc("v1", OpenApiInfo
OpenApiSecurityScheme
Staje się równieżApiKeyScheme
Zobacz także dokumenty na https://github.com/domaindrivendev/Swashbuckle.AspNetCore
źródło
Version
obiektuOpenApiInfo
stwierdza, że należy go zdefiniować WYMAGANE. Jeśli pominę to definiowanie, wszystko działa, poza tym, że nie ma wydrukowanych 2 specjalnych etykiet obok nazwy mojej aplikacji w interfejsie użytkownika wygenerowanym przez swagger (jeden zawiera wersję, którą pominęliśmy, drugiOAS3
. Co to znaczy?). Dlaczego jest to wymagane i co z tym rozumiemy? W połączonych dokumentach jest to zdefiniowane jakov1
. Jeśli tak powinno pozostać, czy to tylko przykład - powinniśmy raczej przechowywać tam wersję naszej aplikacji. Może to być wszystko, na przykład0.0.1a-ffg
netstandard2.1 do netcoreapp3.0 MvcJsonOptions -> MvcNewtonsoftJsonOptions
źródło