«Не удалось загрузить тип« Microsoft.AspNetCore.Mvc.MvcJsonOptions »из сборки« Microsoft.AspNetCore.Mvc.Formatters.Json, версия = 3.0.0.0 - PullRequest
2 голосов
/ 13 октября 2019

Я использую библиотеку 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();

Пожалуйста, помогите, почему я получаю эту ошибку, и помогите, как решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 23 октября 2019

Я не уверен, что это решает проблему OP, но эта ошибка также возникает, когда вы используете Swashbuckle 4 в .Net Core 3. На момент написания этой статьи решение заключается в использовании предварительной версии Swashbuckle 5. т.е.

<PackageReference Include="Swashbuckle.AspNetCore" Version="5.0.0-rc4" />

Тогда вам нужно будет обновить его в Startup.cs. Обычно это включает префиксные классы, которые не компилируются с OpenApi, например,

options.SwaggerDoc("v1" new Info ...

становится

options.SwaggerDoc("v1", OpenApiInfo

Также OpenApiSecuritySchemeстановится ApiKeyScheme

См. также документы на https://github.com/domaindrivendev/Swashbuckle.AspNetCore

2 голосов
/ 13 октября 2019

Причина, по которой вы получаете ошибку, заключается в том, что MvcJsonOptions был удален в .NET Core 3.0;Вы можете прочитать больше о критических изменениях здесь .

...