2012-07-11 22 views
5

के विभिन्न संस्करणों का संदर्भ देना मैं अपने एमवीसी प्रोजेक्ट के साथ खेल रहा हूं।Json.NET dll

  1. मैं परियोजना है, जो बारी में अपनी निर्भरता से एक के रूप Newtonsoft.Json.dll 4.0.0.0 (पुराने) का उपयोग करता है में एक पैकेज SocialAuth.Net बुलाया Nugeted।

  2. तब भी मुझे जेसन की आवश्यकता थी। खुद को, मैं एक नया संस्करण चाहता था, इसलिए मैंने जेसन.नेट को नूजेट किया, जिसमें एक नया संस्करण 4.5.0.0 (नया) है।

तब समस्या होती है। मेरे रेजर ध्यान में रखते हुए "ViewBag.Title = ...." यह लाल रेखांकन कह गया है:

Warning 1 c:\users\admin\documents\visual studio 2010\Projects\WebApp\WebApp\Views\Home\Index.cshtml: ASP.NET runtime error: Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

यह मेरा web.config की Json हिस्सा है:

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

तो,

  1. मैं संदर्भों पर गया, पाया और पाया Newtonsoft.Json 4.0.0.0 था (शायद SocialAuth.Net के साथ आया था), और मैंने इसे हटा दिया, और 4.5.0.0 संदर्भ मुझे Nuget से मिला।

  2. मैं वेब ऐप/बिन/डीबग/फ़ोल्डर में गया और सब कुछ हटा दिया, और फिर परियोजना का पुनर्निर्माण किया।

हालांकि, एक बार मैं webapp के पुनर्निर्माण, Newton.Json 4.0.0.0 वापस बिन/डिबग/में परवाह किए बिना कैसे मैं मैन्युअल रूप से नए Nuget 4.5.0.0 करने के लिए इसे संदर्भ आता है। और एक ही त्रुटि वापस आती है। मैं फँस गया हूँ।

क्या आपके पास है और इस डीएल मुद्दे से निपटने का तरीका है? धन्यवाद।

संपादित -----------------------------------

सोच का एक सा होने के बाद, मैं समझता हूं कि ऐसा इसलिए है क्योंकि पहले जेसन.Net (नया 4.5) पहले जुड़ा हुआ है, तो पुराने होने के बाद पुराना व्यक्ति आता है। तो पुराना एक नया ओवरराइट करता है।

मैं जीएसी इंस्टॉलिंग से परिचित नहीं हूं, लेकिन मुझे पता है कि मैं वर्म्स की खोल सकता हूं और वहां 2 संस्करण स्थापित कर सकता हूं, जो मैं नहीं चाहता, क्योंकि इसका मतलब है कि मुझे वेब पर तैनात हर मशीन पर ऐसा करना है एप्लिकेशन। क्या web.config के साथ खेलने का कोई तरीका है और इसके आसपास हो?

+0

oldVersion = "0.0.0.0-4.5.0.0" पुराना होना चाहिए = "0.0.0.0-4.0.0.0" – user516883

उत्तर

0

आप ‑IgnoreDependencies ध्वज के साथ SocialAuth.Net पैकेज को स्थापित करने का प्रयास कर सकते हैं, फिर निर्भरता को मैन्युअल रूप से स्थापित कर सकते हैं और यह सुनिश्चित कर सकते हैं कि आप केवल Json.Net लाइब्रेरी का नवीनतम संस्करण स्थापित करें।

फिर रनटाइम पर SocialAuth.Net पैकेज असेंबली रीडायरेक्ट का सम्मान करेगा और पुराने संस्करण की बजाय जेसन.Net (v4.5) लोड करेगा।

+0

अभी इसका परीक्षण किया गया। "-इग्नोर निर्भरता" कमांड पैकेज में कुछ भी प्रतीत नहीं होता है। यह अभी भी अपने संस्करण के साथ नए संस्करण Json.Net 4.5 को ओवरराइट करता है। – Tom

+1

क्या आपने पहले संकुल में संकुल को अनइंस्टॉल किया था? यदि संभव हो, तो सभी संकुल को पहले अनइंस्टॉल करें और फिर स्विच के साथ उन्हें फिर से इंस्टॉल करें। मैंने कभी भी इसका इस्तेमाल नहीं किया जो विशेष रूप से खुद को स्विच करता है लेकिन दस्तावेज़ों से इसे आपके द्वारा वर्णित नहीं किया जाना चाहिए। –

+0

मैंने इसे फिर से शुरू किया। पुष्टि की कि SocialAuth।नेट ने "-इग्नोर निर्भरता" कमांड को अनदेखा कर दिया, इसके साथ अपनी खुद की निर्भरताओं को एक नए डाउनलोड के साथ लाया। फिर पुराने लोगों के साथ मेरी नई निर्भरताओं को अधिलेखित किया। Json.Net और log4net होने के नाते .... यह भी ध्यान दिया गया कि अगर मैं Nuget प्रबंधक UI पर जाता हूं और इसके विवरण के तहत SocialAuth.Net निर्भरता जांचता हूं, तो यह "शून्य" कहता है। हो सकता है SocialAuth.Net ने अपनी निर्भरताओं को Nuget और/या किसी भी तरह से कड़ी मेहनत से संबद्ध नहीं किया? – Tom