Я использую netstandard2.1
библиотеку в своем netcoreapp3.0
веб-приложении. При добавлении моего сервиса Startup
я получаю следующую ошибку:
«Не удалось загрузить тип« Microsoft.AspNetCore.Mvc.MvcJsonOptions »из сборки« Microsoft.AspNetCore.Mvc.Formatters.Json, версия = 3.0.0.0
Я также использую некоторые функции из Microsoft.AspNetCore.Mvc
пакета 2.2.0 в моей библиотеке классов.
Вот моя библиотека .csproj
,
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
</ItemGroup>
</Project>
Вот мой ServiceExtensions
класс из моей библиотеки,
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;
}
}
Вот мой ConfigureLibraryOptions
класс,
public class ConfigureLibraryOptions : IConfigureOptions<MvcOptions>
{
public void Configure(MvcOptions options)
{
options.ModelBinderProviders.Insert(0, new CustomBinderProvider());
}
}
Вот ConfigureServices
из Startup
,
services.AddControllersWithViews().AddMyLibrary();
Пожалуйста, помогите, почему я получаю эту ошибку, и помогите, как решить эту проблему?
netstandard2.1
библиотеку классов со ссылкой наMicrosoft.AspNetCore.Mvc
2.2.0 вnetcoreapp3.0
? Вместо этого я должен изменить ,netstandard2.1
чтобыnetcoreapp3.0
и добавитьFrameworkReference
кMicrosoft.AspNetCore.App
?Я не уверен, что это решает проблему OP, но эта ошибка также возникает, когда вы используете Swashbuckle 4 в .Net Core 3. Решением является использование Swashbuckle 5. т.е.
Затем вам нужно обновить его в Startup.cs. В целом , что предполагает префиксы классов , которые не компилировать с ,
OpenApi
например ,options.SwaggerDoc("v1" new Info ...
становится
options.SwaggerDoc("v1", OpenApiInfo
И
OpenApiSecurityScheme
становитсяApiKeyScheme
См. Также документы по адресу https://github.com/domaindrivendev/Swashbuckle.AspNetCore.
источник
Version
для объектаOpenApiInfo
заявляет, что он ТРЕБУЕТСЯ быть определенным. Если я пропущу его определение, все будет работать, за исключением того, что рядом с именем моего приложения в пользовательском интерфейсе, сгенерированном сваггером, напечатаны 2 специальные метки (одна содержит версию, которую мы пропустили, другаяOAS3
. Почему это требуется и что мы обозначаем этим? В документах, на которые вы ссылаетесь, это определяется какv1
. Должен ли он остаться таким, или это просто пример - мы должны вместо этого хранить версию нашего приложения там. Это может быть что угодно, например0.0.1a-ffg
от netstandard2.1 до netcoreapp3.0 MvcJsonOptions -> MvcNewtonsoftJsonOptions
источник