'Derleme' Microsoft.AspNetCore.Mvc.MvcJsonOptions 'türü yüklenemedi' Microsoft.AspNetCore.Mvc.Formatters.Json, Sürüm = 3.0.0.0


14

Web uygulamamda netstandard2.1kütüphane kullanıyorum netcoreapp3.0. Hizmetimi eklerken Startupaşağıdaki hatayı alıyorum:

'Derleme' Microsoft.AspNetCore.Mvc.MvcJsonOptions 'türü yüklenemedi' Microsoft.AspNetCore.Mvc.Formatters.Json, Sürüm = 3.0.0.0

Ayrıca Microsoft.AspNetCore.Mvcsınıf kütüphanemde 2.2.0 paketinin bazı özelliklerini kullanıyorum .

İşte kütüphanem .csproj,

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
  </ItemGroup>

</Project>

İşte ServiceExtensionsbenim kütüphanemdeki dersim,

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;
    }
}

İşte benim ConfigureLibraryOptionssınıfım,

public class ConfigureLibraryOptions : IConfigureOptions<MvcOptions>
{
    public void Configure(MvcOptions options)
    {
        options.ModelBinderProviders.Insert(0, new CustomBinderProvider());
    }
}

İşte ConfigureServicesgelen Startup,

services.AddControllersWithViews().AddMyLibrary();

Lütfen bu hatayı neden aldığım konusunda yardım edin ve bunu nasıl çözeceğime yardımcı olun?

Yanıtlar:


6

Hatayı almanızın nedeni MvcJsonOptions.NET Core 3.0'da kaldırılmış olmasıdır; burada yapılan değişiklikler hakkında daha fazla bilgi edinebilirsiniz .


Bu 2.2.0 içinde netstandard2.1başvuru ile sınıf kitaplığı kullanamazsınız anlamına gelir ? Onun yerine değişmelidir için ve bir ekleme için ? Microsoft.AspNetCore.Mvcnetcoreapp3.0netstandard2.1netcoreapp3.0FrameworkReferenceMicrosoft.AspNetCore.App
parmaklar10

50

Bu OP sorunu çözer emin değilim, ancak .Net Core 3 Swashbuckle 4 kullandığınızda da bu hata oluşur. Çözüm Swashbuckle 5 kullanmaktır. İe

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

Ardından Startup.cs dosyasında yükseltmeniz gerekir. Genellikle bu, OpenApiörneğin derlenmeyen önek sınıflarını içerir

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

olur

options.SwaggerDoc("v1", OpenApiInfo

Ayrıca OpenApiSecuritySchemeolurApiKeyScheme

Ayrıca https://github.com/domaindrivendev/Swashbuckle adresindeki dokümanlara da bakın.


VersionNesnenin özelliği , OpenApiInfotanımlanması GEREKİR. Tanımlamayı atlarsam, swagger tarafından oluşturulan kullanıcı arayüzünde uygulamamın adının yanında 2 özel etiket basılmaması dışında her şey çalışır (Biri atladığımız sürümü içerir, diğeri OAS3. Ne ​​anlama geliyor?). Neden gerekli ve onunla ne ifade ediyoruz? Bağladığınız dokümanlarda, olarak tanımlanır v1. Böyle kal, ya sadece örnek olması mı - biz oldukça saklamalısınız bizim orada yerine uygulamanın versiyonunu. Herhangi bir şey olabilir0.0.1a-ffg
SpiritBob

@Destek Monica - SpiritBob: swagger.json dosyasının bilgi nesnesine girer. Bu şartname için gerekli olduğu için gereklidir. Hiç "v1" den değiştirmek zorunda kalmadım. Bununla ilgili daha fazla bilgiyi şu dokümanlardan edinebilirsiniz: github.com/OAI/OpenAPI-Specification/blob/master/versions/…
Lee Richardson

thansk, sorunumu
çözdün

3

netstandard2.1 to 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;
            });
}

1
NuGet paketini Microsoft.AspNetCore.Mvc.NewtonsoftJson'u yüklememiz gerekeceği veya bu işe yaramayacağı gerçeğini de eklerseniz, bu yanıt büyük ölçüde geliştirilecektir.
Frank Thomas

.NET 3.1
Morten_564834
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.