c# - Json.NET को सरल ऑब्जेक्ट के क्रमिकरण के लिए System.Xml.Linq v5.0.5 की आवश्यकता क्यों है?



visual-studio-2015 visual-studio-extensions (1)

मेरे पास निम्न वस्तु है:

public class ProjectInfo
{
    public string ConnectionStringName { get; set; }
    public string DefaultEntityNamespace { get; set; }
    public string DefaultSharedNamespace { get; set; }
    public string DefaultTestNamespace { get; set; }
    public string SqlProviderName { get; set; }
}

जिसे मैं एक सरल क्रमबद्ध करने की कोशिश करता हूं (एक वीएसआईएक्स परियोजना में):

var settings = new ProjectInfo { ConnectionStringName = "SomeName" };
var json = JsonConvert.SerializeObject(settings);

जो मुझे देता है:

An exception of type 'System.IO.FileNotFoundException' occurred in Newtonsoft.Json.dll but was not handled in user code

Additional information: Could not load file or assembly 'System.Xml.Linq, Version=5.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.

मैंने पिछली घंटा यह पता लगाने की कोशिश की है कि निर्भरता कहां से आती है या क्यों Json.NET उस नामस्थान का उपयोग करने का प्रयास करता है। System.Xml.Linq को मेरी किसी भी परियोजना में संदर्भित नहीं किया गया है।

स्टैक ट्रेस से मैं देख सकता हूं:

   at Newtonsoft.Json.Converters.XmlNodeConverter.CanConvert(Type valueType)
   at Newtonsoft.Json.JsonSerializer.GetMatchingConverter(IList`1 converters, Type objectType)
   at Newtonsoft.Json.Serialization.DefaultContractResolver.InitializeContract(JsonContract contract)
   at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(Type objectType)
   at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(Type objectType)
   at Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(Type type)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)
   at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)
   at Newtonsoft.Json.JsonConvert.SerializeObjectInternal(Object value, Type type, JsonSerializer jsonSerializer)
   at Newtonsoft.Json.JsonConvert.SerializeObject(Object value)

.. लेकिन यह उस मार्ग क्यों लेता है?

अद्यतन करें

एक साधारण परीक्षण केस भी विफल रहता है:

[Fact]
public void should_be_Able_to_Serialize_settings()
{
    JsonConvert.SerializeObject(new ProjectInfo {ConnectionStringName = "Arne"});
}

अद्यतन 2

इस परियोजना ने पहले काम किया है। यह एक सहयोगी के कंप्यूटर पर भी काम करता है। एकमात्र अंतर जो मैं देख सकता हूं वह यह है कि मैंने VStudio 2015 अपडेट 1 में अपग्रेड कर दिया है। ( या मैंने कहीं मूर्खतापूर्ण गलती की है )। लेकिन मैंने अपने सहयोगी का उपयोग करने वाले नवीनतम संशोधन के लिए एक हार्ड रीसेट भी किया है।

यह System.Linq.Xml के v5.0.5 को संदर्भित करने का प्रयास क्यों करता है? .NET 4.5 के लिए मानक एक v4.0.0 नहीं है? .NET का कौन सा संस्करण v5.0.5 करता है?

(मुझे पहले Json.NET के साथ कभी भी कोई समस्या नहीं आई है। क्या यह VStudio 2015 / .NET 4.5.2 / VSIX प्रोजेक्ट के साथ कुछ है?)

Update3

निर्भरताएं यहां दी गई हैं। वे दिखाते हैं कि Json.NET उस सटीक संस्करण को संदर्भित करने का प्रयास करता है:

अद्यतन करें:

प्रोजेक्ट फ़ाइल में Json.NET संदर्भ:

<Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=c70b2336aed9f731, processorArchitecture=MSIL">
  <HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
  <Private>True</Private>
</Reference>

संपादित करें 4:

मेरी समस्या यह है कि एक्सटेंशन काम करने में विफल रहता है क्योंकि यह एक असेंबली लोड करने का प्रयास करता है जो मौजूद नहीं है। मेरी समझ से, v5.0.5 एक चांदी की रोशनी असेंबली है। और मैं चांदी की रोशनी का उपयोग नहीं करता हूं।

मैंने एक असेंबली रीडायरेक्ट जोड़ने की कोशिश की है, लेकिन यह काम नहीं कर रहा है।

<dependentAssembly>
  <assemblyIdentity name="System.Xml.Linq" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
  <bindingRedirect oldVersion="0.0.0.0-5.0.5.0" newVersion="4.0.0.0"/>
</dependentAssembly>

Json.NET Json से xml में कनवर्ट करने के लिए System.Xml.Linq का उपयोग करता है।

आप लाइब्रेरी की निर्भरताओं के बिना संकलित करने में सक्षम होने जा रहे हैं, जब तक कि आप निर्भरताओं में से किसी भी प्रकार का संदर्भ नहीं देते। यह सामान्य बात है। मेरे पास NHibernate की Iesi.Collections निर्भरता के साथ एक ही समस्या है।

मैंने Json.Net स्रोत कोड और System.Xml.Linq के लिए उपयोग कथन को .Net संस्करण के लिए सशर्त बनाया है। क्या आप और आपके सहयोगी एक ही नेट संस्करण चला रहे हैं? क्या आपने हाल ही में अपनी मशीन पर नेट बदल दिया था?

मैं सुझाव दूंगा कि एनएचबीरनेट और किसी भी निर्भरता को पूरी तरह से हटा दें। फिर NuGet के साथ Json.Net स्थापित करें। NuGet स्वचालित रूप से सभी निर्भरताओं को जोड़ देगा और किसी भी आवश्यक असेंबली बाध्यकारी रीडायरेक्ट प्रदर्शन करेगा।

यहां तक ​​कि यदि आप NuGet का उपयोग नहीं करना चाहते हैं, तो एक diff चलाएं और देखें कि यह कौन से परिवर्तन करता है ताकि आप इसे भी बना सकें।





.net-4.5.2