[c#] ‘어셈블리’Microsoft.AspNetCore.Mvc.Formatters.Json, 버전 = 3.0.0.0에서 ‘Microsoft.AspNetCore.Mvc.MvcJsonOptions’유형을로드 할 수 없습니다.

웹 응용 프로그램 netstandard2.1에서 라이브러리를 사용하고 있습니다 netcoreapp3.0. 에 서비스를 추가 Startup하면 아래 오류가 발생합니다.

‘어셈블리’Microsoft.AspNetCore.Mvc.Formatters.Json, 버전 = 3.0.0.0에서 ‘Microsoft.AspNetCore.Mvc.MvcJsonOptions’유형을로드 할 수 없습니다.

또한 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();

이 오류가 발생하는 이유와이 문제를 해결하는 방법에 대해 도와주세요.



답변

오류가 발생하는 이유 MvcJsonOptions는 .NET Core 3.0에서 제거 되었기 때문입니다 . 주요 변경 사항에 대한 자세한 내용은 여기를 참조하십시오 .


답변

이것이 OP의 문제를 해결하는지 확실하지 않지만 .Net Core 3에서 Swashbuckle 4를 사용할 때도이 오류가 발생합니다. 해결책은 Swashbuckle 5를 사용하는 것입니다.

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

그런 다음 Startup.cs에서 업그레이드해야합니다. 일반적으로 그와 함께 컴파일되지 않는 클래스 접두사를 포함 OpenApi예를

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

된다

options.SwaggerDoc("v1", OpenApiInfo

또한 OpenApiSecurityScheme이된다ApiKeyScheme

https://github.com/domaindrivendev/Swashbuckle.AspNetCore 에서 문서를 참조하십시오.


답변

netstandard2.1-netcoreapp3.0 MvcJsonOptions-> MvcNewtonsoftJsonOptions

public IServiceProvider ConfigureServices(IServiceCollection services)
{
            //MVC
            services.AddControllersWithViews(options =>
            {
            }).AddNewtonsoftJson();

            services.PostConfigure<MvcNewtonsoftJsonOptions>(options => {
                options.SerializerSettings.ContractResolver = new MyCustomContractResolver()
                {
                    NamingStrategy = new CamelCaseNamingStrategy()
                };
                options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
            });
}


답변