웹 응용 프로그램 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;
});
}