'असेंबली लोड नहीं कर सका' Microsoft.AspNetCore.Mvc.MvcJsonOptions 'असेंबली से' Microsoft.AspNetCore.Mvc.Formatters.Json, संस्करण = 3.0.0.0


14

मैं 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();

कृपया मदद करें कि मुझे यह त्रुटि क्यों हो रही है और इसे हल करने के तरीके पर सहायता करें

जवाबों:


6

आपके द्वारा त्रुटि प्राप्त करने का कारण MvcJsonOptions.NET .NET 3.0 में हटा दिया गया है; आप यहाँ होने वाले परिवर्तनों के बारे में अधिक पढ़ सकते हैं ।


इसका मतलब है कि मैं 2.2.0 में netstandard2.1संदर्भ के साथ कक्षा पुस्तकालय का उपयोग नहीं कर सकता हूं ? इसके बजाय मैं बदलना चाहिए करने के लिए और एक जोड़ने के लिए ? Microsoft.AspNetCore.Mvcnetcoreapp3.0netstandard2.1netcoreapp3.0FrameworkReferenceMicrosoft.AspNetCore.App
उंगलियों

50

मुझे यकीन नहीं है कि अगर यह ओपी की समस्या को हल करता है, लेकिन यह त्रुटि तब भी होती है जब आप Swashbuckle 4 का उपयोग .Net Core 3. समाधान 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 पर भी डॉक्स देखें


Versionऑब्जेक्ट के लिए गुण OpenApiInfoबताता है कि इसे परिभाषित किया जाना आवश्यक है। अगर मैं इसे परिभाषित करना छोड़ देता हूं, तो सब कुछ काम करता है, स्वैगर द्वारा उत्पन्न यूआई में मेरे आवेदन के नाम के बगल में मुद्रित 2 विशेष लेबल नहीं होते हैं (एक में वह संस्करण है जिसे हमने छोड़ दिया है, दूसरा OAS3) इसका क्या मतलब है?)। इसकी आवश्यकता क्यों है, और हम इसके साथ क्या संकेत देते हैं? आपके द्वारा लिंक किए गए डॉक्स में, इसे इस रूप में परिभाषित किया गया है v1। क्या इसे ऐसे ही रहना चाहिए, या यह एक मात्र उदाहरण है - हमें इसके बजाय अपने एप्लिकेशन के संस्करण को स्टोर करना चाहिए । यह कुछ भी हो सकता है, जैसे0.0.1a-ffg
स्प्रिटबेक्यू

@Support मोनिका - स्पिरिटबैंक: यह स्वैगर.जॉन फ़ाइल की जानकारी ऑब्जेक्ट में जाती है। यह आवश्यक है क्योंकि यह युक्ति द्वारा आवश्यक है। मुझे इसे "v1" से बदलने की आवश्यकता नहीं है। आप इसके बारे में आधिकारिक डॉक्स में अधिक पढ़ सकते हैं: github.com/OAI/OpenAPI-Specification/blob/master/versions/…
ली रिचर्डसन


3

netsteapp2.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;
            });
}

1
यह उत्तर बहुत बेहतर होगा। यदि आप इस तथ्य को भी शामिल करते हैं कि हमें NuGet पैकेज Microsoft.AspNetCore.Mvc.NewtonsoftJson स्थापित करना होगा या यह काम नहीं करेगा।
फ्रैंक थॉमस

मैं .NET 3.1 के लिए काम करने के लिए इसे प्राप्त नहीं कर सकता
मोर्टेन_564834
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.