मैं एक नए ASP.NET MVC 5 प्रोजेक्ट में NuGet पैकेज संदर्भों को अपडेट करने के बाद JSON.NET के साथ विधानसभा संस्करण संघर्ष कैसे ठीक कर सकता हूं?


89

मैंने VS 2013 में एक नया ASP.NET MVC 5 वेब प्रोजेक्ट बनाया (अपडेट 1) फिर सभी NuGet पैकेजों को अपडेट किया। जब मैं परियोजना का निर्माण करता हूं, तो मुझे निम्नलिखित चेतावनी मिलती है:

चेतावनी MSB3243: "Newtonsoft.Json, संस्करण = 6.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = 30ad4fe6b2a6aeed" और "Newtonsoft.Json, संस्करण = 4.5.0.0, संस्कृति = तटस्थ, PublicKeyToken = 30ad4fe6b6b2b2" के बीच संघर्ष को हल करने का कोई तरीका नहीं।

जब मैं web.config की जांच करता हूं, तो मैं देखता हूं कि एक बाध्यकारी रीडायरेक्ट जगह में है:

  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
  </dependentAssembly>

जो वास्तव में चेतावनी की सलाह देता है।

मैं इस चेतावनी को कैसे ठीक कर सकता हूं?


हां, मैंने पूर्ण पुनर्निर्माण किया। मैंने NuGet को नवीनतम में भी अपडेट किया, एक नया समाधान बनाया और उसी समस्या को पुन: उत्पन्न किया।
जिम लैंब

जवाबों:


106

यहां मैंने चेतावनी को ठीक करने के लिए जो कदम उठाए थे:

  • वीएस में अनलोड परियोजना
  • .Csproj फ़ाइल संपादित करें
  • Newtonsoft.Json असेंबली के सभी संदर्भों के लिए खोजें
    • मिला दो, एक से वी 6 और एक से वी 5
    • V6 के साथ संदर्भ को v5 में बदलें
  • पुनः लोड परियोजना
  • निर्माण और नोटिस विधानसभा संदर्भ विफलता
  • संदर्भ देखें और देखें कि अब न्यूटनसॉफ्ट के लिए दो हैं। उस एक को निकालें जो हल करने में विफल हो रहा है।
  • पुनर्निर्माण - कोई चेतावनी नहीं

12
मुझे दो संदर्भ मिले, एक v6 के लिए और एक v5 के लिए लेकिन मैंने v5 को हटा दिया (प्रतिस्थापित नहीं)। उसके बाद मुझे "असेंबली रेफरेंस फेलियर" या यूआई में न्यूटनसॉफ्ट.जॉन के दो संदर्भ जैसी कोई समस्या नहीं हुई। मैं किसी को भरवां होने का अनुमान लगा रहा हूँinstall.ps1
ta.speot.is

समाधान के लिए धन्यवाद। मैंने प्रोजेक्ट फ़ाइल से पुराना संदर्भ भी हटा दिया था और कोई समस्या नहीं थी।
चार्ल्स प्रकाश दसारी

31
+1 - यह वास्तव में मुझे पागल कर देता है जब मुझे इस तरह से सामान करना पड़ता है। यही कारण है कि मैं हमेशा nuget पैकेज मैनेजर पर अपग्रेड पर क्लिक करने में संकोच करता हूं।
hylander0

1
मुझे यह समस्या हो रही थी और मैंने जो अतिरिक्त संदर्भ महसूस किया था, उसे हटाकर इसे ठीक कर दिया है। यह Microsoft कनेक्ट बग का लिंक है जो अतिरिक्त संदर्भ का मूल कारण है: Connect.microsoft.com/VisualStudio/feedback/details/816725/…
मार्टिन कॉस्टेलो

1
मेरे मामले में Newtonsoft.Json 11.0.1 और 11.0.2 के दो अलग-अलग संस्करण का संदर्भ था, हालांकि यह संस्करण 6.0 के बारे में शिकायत कर रहा था।
डैनियल लोबो

31

मुझे यह समस्या थी क्योंकि मैंने संकुल को अद्यतन किया था, जिसमें Microsoft.AspNet.WebApi शामिल था, जिसका संदर्भ न्यूटनसॉफ्ट.जॉन 4.5.6 है और मेरे पास पहले से ही संस्करण 6 स्थापित था। यह संस्करण 6 का उपयोग करने के लिए पर्याप्त चतुर नहीं था।

इसे हल करने के लिए, WebApi अपडेट के बाद मैंने टूल्स> NuGet Package Manager> Pacakge Manager Console को खोला और चलाया:

 Update-Package Newtonsoft.Json

लॉग ने दिखाया कि 6.0.x और 4.5.6 संस्करण सभी नवीनतम एक के लिए अपडेट किए गए थे और सब कुछ ठीक था।

मुझे लग रहा है कि यह फिर से आएगा।


1
मुझे अपने समाधान में कई अलग-अलग संस्करणों की समस्या हो रही थी जिसमें कई परियोजनाएं हैं, यह पूरी तरह से तय है और सभी को नवीनतम JSON.net पर अपडेट किया गया है। अच्छा!
c0d3p03t

1
यह सबसे आसान, सबसे सीधा समाधान था जिसने मेरी समस्या को ठीक कर दिया। धन्यवाद!
यंगर्रर

21

मुझे प्रोजेक्ट फ़ाइल से इस अनुभाग को हटाने की समस्या ठीक करने के लिए मिली।

<ItemGroup>
<Reference Include="Newtonsoft.Json">
  <HintPath>..\packages\Newtonsoft.Json.6.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>


यह बात है। मुझे लगता है कि कोई भी Newtonsoft.Json.6.0.1 / 6.0.3 / 6.0.5 मैच को बाध्यकारी पुनर्निर्देशन '' पुराने विचलन = "0.0.0.0-6.0.0.0" "" पर नहीं जानता है, लेकिन मुझे नहीं पता कि कैसे सही एक लिखना है
फंतासी

यह मेरी समस्या भी थी, मुझे यकीन नहीं है कि इसे क्या जोड़ा गया है।
स्मृतिलोप

मेरे लिए काम किया। V6.0 और v12.0 के बीच संघर्ष से संबंधित त्रुटि। आइटम समूह संदर्भ v11.0 था। तो यह निश्चित नहीं है कि क्या हो रहा है, लेकिन आइटम समूह को हटाने से लगता है कि इसे हल कर दिया गया है, जहां तक ​​संकलन त्रुटि को दूर करना है।
ब्रायन।

13

यदि उपरोक्त में से कोई भी काम नहीं करता है, तो web.config या app.config में इसका उपयोग करने का प्रयास करें:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
            <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>

यह उस स्थिति के लिए सबसे उपयुक्त है जब आपके पास उच्च संस्करण का उपयोग करके एक मौजूदा परियोजना है और आप एक निर्भरता को जोड़ते हैं जो उसी पैकेज के पुराने संस्करण का उपयोग कर रहा है, इसलिए आप पुराने संस्करण को नए पर पुनर्निर्देशित करते हैं।
इस्माइल हैवेल

13

मैंने Newtonsoft.Json 11.0.1 से 12.0.2 तक अपग्रेड किया। नोटपैड ++ में प्रोजेक्ट फ़ाइल खोलना मैंने दोनों को खोजा

<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
      <HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
    </Reference>

तथा

<ItemGroup>
    <Reference Include="Newtonsoft.Json">
      <HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
    </Reference>
  </ItemGroup>

मैंने 11.0.1 संस्करण के लिए संकेत पथ के साथ संदर्भ को लपेटते हुए आइटम समूह को हटा दिया।

इन मुद्दों को खोजने के लिए पागलपन भरा हो सकता है। क्या अधिक है, डेवलपर्स अक्सर पिछले प्रोजेक्ट सेटअप के समान चरणों का पालन करते हैं। पूर्व सेटअप समस्या का सामना नहीं किया। जिस भी कारण से प्रोजेक्ट फ़ाइल कभी-कभी गलत तरीके से अपडेट की जाती है।

मेरी इच्छा है कि Microsoft इन दृश्य स्टूडियो DLL नरक के मुद्दों को पॉप अप करने से ठीक कर दे। यह अक्सर बहुत दूर होता है और प्रगति को रोकने का कारण बनता है जब तक कि इसे ठीक नहीं किया जाता है, अक्सर परीक्षण और त्रुटि से।


1
ठीक यही समस्या थी। धन्यवाद!
बजे जॉर्ज फैबिश

8

आपकी असेंबली रीडायरेक्ट त्रुटियों का अंतिम समाधान

ठीक है, उम्मीद है कि यह किसी भी (साने) विधानसभा संदर्भ विसंगतियों को सुलझाने में मदद करेगा ...

  1. त्रुटि की जाँच करें।

वेबसाइट पर सर्फ करें

  1. विधानसभा रीडायरेक्ट के बाद web.config की जाँच करें। मौजूद न होने पर एक बनाएं।

मौजूदा web.config असेंबली रीडायरेक्ट

  1. असेंबली के लिए संदर्भ को राइट-क्लिक करें और गुण चुनें।

असेंबली प्रोजेक्ट में संदर्भ सूची में असेंबली

  1. गुण तालिका में संस्करण (रनटाइम संस्करण नहीं) की जांच करें। उस की नकल करें।

गुण तालिका विधानसभा का संस्करण दिखा रही है

  1. NewVersion विशेषता में चिपकाएँ।

web.config असेंबली को अपडेट किए गए NewVersion के साथ रीडायरेक्ट करता है

  1. सुविधा के लिए, OldVersion के अंतिम भाग को कुछ उच्च, गोल और काल्पनिक में बदलें।

web.config असेंबली को अपडेट किए गए पुराने वर्जन के साथ रीडायरेक्ट करता है

आनन्द।


इस जवाब ने मुझे बड़ा समय बचा लिया! मेरे पास एक वेब एप्लिकेशन था जो एक कस्टम C # लाइब्रेरी का उपयोग कर रहा था, दोनों ने एक ही नगेट पैकेज का उपयोग किया था लेकिन वेब एप्लिकेशन में लाइब्रेरी की तुलना में पुराना संस्करण है और लाइब्रेरी का उपयोग करने वाले संस्करण के लिए रीडायरेक्ट शामिल नहीं था।
वार ग्रेवी

4

याद रखें कि बाध्यकारी पुनर्निर्देशन के साथ

oldVersion = "0.0.0.0-6.0.0.0"

आप कह रहे हैं कि dll के पुराने संस्करण संस्करण 0.0.0.0 और संस्करण 6.0.0.0 के बीच हैं।


1
oldVersionवास्तव में यहाँ मिथ्या नाम है, आप जो कह रहे हैं वह यह है कि आपकी असेंबली / एक्सई को रेंज में एक संस्करण के संदर्भ में बनाया गया था 0.0.0.0-6.0.0.0और जो वास्तव में स्थापित (और पसंदीदा) संस्करण के तहत मूल्य है newVersion(पुराने संस्करण के रूप में बेहतर रूप से वर्गीकृत किया जाएगा) "अपेक्षित संस्करण" और नया संस्करण "वास्तविक उपलब्ध संस्करण" के रूप में बेहतर रूप से चित्रित किया जाएगा)
कुछ भी नहीं

2

किसी ने निम्नलिखित का उल्लेख नहीं किया, जो मेरी समझ में सही समाधान है:

परियोजना जहां nuget स्थापित किया गया है के csproj जाएँ, और सेट AutoGEneratedBindingRedirectsकरने के लिए false

<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>

MSDN में पूरा लेख।


1

मैंने अपने पैकेज को अपडेट किया और इसे फिर से इंस्टॉल किया - लेकिन मुझे अभी भी वही त्रुटि मिल रही थी जैसा कि ओपी ने उल्लेख किया था। मैंने निम्नलिखित करके मैन्युअल रूप से संदर्भित dll को संपादित किया।

मैंने अपने संदर्भ से newtonsoft.json.dll को हटा दिया, फिर बिन निर्देशन से .dll को मैन्युअल रूप से हटा दिया। तब मैंने मैन्युअल रूप से newtonsoft.json.dll को nuget पैकेज फ़ोल्डर से प्रोजेक्ट बिन में कॉपी किया, फिर .dll फ़ाइल में ब्राउज़ करके संदर्भ जोड़ा।

अब मेरा प्रोजेक्ट फिर से बनता है।


0

मेरे पास इसी तरह का मुद्दा था और मैं अपनी स्थिति में दूसरों के लिए जवाब पोस्ट करना चाहता था।

मेरे पास एक ASP.NET वेब अनुप्रयोग चल रहा है, जिसमें कई अन्य C # क्लास के लिब प्रोजेक्ट हैं।

मेरा ASP.NET वेब अनुप्रयोग json का उपयोग नहीं कर रहा था, लेकिन अन्य परियोजनाएँ जहाँ।

मैंने इसे कैसे तय किया:

  1. मैंने सुनिश्चित किया कि सभी प्रोजेक्ट जहां नवीनतम संस्करण (6) का उपयोग करते हुए NuGet का उपयोग करते हुए सभी परियोजनाओं पर वर्तमान में json के किसी भी संस्करण का उपयोग कर रहे हैं - यह समस्या को ठीक करता है
  2. मैंने NuGet का उपयोग करते हुए वेब एप्लिकेशन में json जोड़ा - इस मुद्दे को तय किया (मुझे इसमें डुबकी क्यों दें):

चरण 2 सबसे पहले json के लिए एक कॉन्फ़िगरेशन जानकारी जोड़ रहा था, जो यह सुझाव देता है कि सभी परियोजनाएं, नवीनतम संस्करण (6) का उपयोग करें, चाहे कोई भी संस्करण हो। Web.Config में असेंबली बाइंडिंग को जोड़ना सबसे अधिक ठीक है।

हालाँकि, चरण 2 ने भी सोम विरासत कोड को साफ कर दिया। यह पता चला है कि हमने पहले अपने वेब एप्लिकेशन में एक पुराने संस्करण (5) का उपयोग किया है और जब संदर्भ (मुझे संदेह है) मैन्युअल रूप से हटा दिया गया था तब NuGet फ़ोल्डर हटाए नहीं गए थे। नवीनतम json (6) जोड़कर, पुराने फ़ोल्डर्स (json v5) को हटा दिया गया। यह फिक्स का भी हिस्सा हो सकता है।


0

विवेके ने उल्लेख किया कि AutoGEneratedBindingRedirects को गलत पर सेट करके बाध्यकारी पुनर्निर्देशन की पीढ़ी को अक्षम करना संभव है। यकीन नहीं होता कि यह प्रश्न पोस्ट होने के बाद से एक नई बात है, लेकिन टूल्स / विकल्प / नगेट पैकेट मैनेजर में एक "छोड़ो बाइंडिंग बाइंडिंग रीडायरेक्ट्स" विकल्प है, जिसे टॉगल किया जा सकता है। डिफ़ॉल्ट रूप से यह बंद है, जिसका अर्थ है कि पुनर्निर्देश लागू किया जाएगा। हालाँकि यदि आप ऐसा करते हैं, तो आपको मैन्युअल रूप से किसी भी आवश्यक बाध्यकारी पुनर्निर्देश का प्रबंधन करना होगा।

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