c# - फ़ाइल या असेंबली 'माइक्रोसॉफ्ट.डाटा.एडीएम' लोड नहीं हो सका




.net azure (6)

हम विंडोज़ एज़ूर स्टोरेज NuGet पैकेज संस्करण 4.1.0 का उपयोग कर रहे हैं, इसकी माइक्रोसॉफ्ट.डाटा.ओडाटा पर निर्भरता है और उसने उस पैकेज को भी जोड़ा है जिसमें माइक्रोसॉफ्ट.डाटा.एडएम डीएल है। जब हम एप्लिकेशन को बनाते और चलाते हैं तो हमें कभी-कभी निम्न त्रुटि मिलती है:

Could not load file or assembly 'Microsoft.Data.Edm' or one of its dependencies. The
located assembly's manifest definition does not match the assembly reference. (Exception
from HRESULT: 0x80131040)

हमारे पास web.config में निम्न बाध्यकारी रीडायरेक्ट है और हमने जांच भी की है और यह समाधान का किसी भी प्रोजेक्ट द्वारा संदर्भित Microsoft.Data.Edm का एकमात्र संस्करण है।

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.6.1.0" newVersion="5.6.1.0" />
  </dependentAssembly>

कभी-कभी जब मैं बिन फ़ोल्डर में देखता हूं तो मुझे Microsoft.Data.Edm का dll संस्करण v 5.6.0 मिलता है। मैं सभी परियोजनाओं के माध्यम से रहा हूं और मुझे स्टोरेज क्लाइंट को छोड़कर Microsoft.Data.Edm का संदर्भ नहीं मिल रहा है और यह निश्चित रूप से 5.6.1 है।

5.6.0 संस्करण कहां से आ रहा है, कोशिश करने और काम करने का सबसे अच्छा तरीका क्या है? जब हमें यह त्रुटि मिलती है तो हम बिन और ओबीजे फ़ोल्डरों को हटाते हैं और पुनर्निर्माण करते हैं और फिर यह ठीक काम करता है, 5.6.1 संस्करण वहां है और सब कुछ काम करता है लेकिन आखिरकार यह फिर से होता है।

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

हमने NuGet से सभी नवीनतम संस्करणों में फिर से अपग्रेड किया है और अभी भी कोई भाग्य नहीं है, मैंने एक टूल चलाया जो निम्नलिखित निर्भरताओं को दिखाता है:

Possible conflicts for Microsoft.Data.Edm:

Microsoft.Data.OData      references Microsoft.Data.Edm, Version=5.6.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Microsoft.Data.Services.Client references Microsoft.Data.Edm, Version=5.6.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Microsoft.WindowsAzure.Storage references Microsoft.Data.Edm, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

Possible conflicts for Microsoft.Data.OData:

Microsoft.Data.Services.Client references Microsoft.Data.OData, Version=5.6.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Microsoft.WindowsAzure.Storage references Microsoft.Data.OData, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

जो मुझे समझ में नहीं आता है, हमारे पास ऐप बाइंडिंग रीडायरेक्ट सेट है लेकिन कभी-कभी 2.6.0 संस्करण कॉपी किया जाता है और कभी-कभी 2.6.2। क्या किसी को पता है कि यह क्यों हो रहा है, पहले कभी यह समस्या नहीं थी।


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

हम विजुअल स्टूडियो बिल्ड आउटपुट वर्बोजिटी को बढ़ाकर समस्याग्रस्त परियोजना की पहचान करके हमारी मशीनों में से किसी एक पर इस मुद्दे का पता लगाने में सक्षम थे:

फिर, हमने आउटपुट की खोज की और लक्ष्य परियोजना की पहचान की जो "माइक्रोसॉफ्ट.डाटा.एडीएम" की खोज करके समस्याग्रस्त था। हमने देखा है कि माइक्रोसॉफ्ट.डाटा.एडीएम पर अप्रत्यक्ष निर्भरता प्रतीत होती है, लेकिन हमने देखा कि असेंबली को उस परियोजना के लिए पैकेज के रूप में स्पष्ट रूप से शामिल नहीं किया गया था। इसलिए, Nuget पैकेज कंसोल का उपयोग करके, हमने प्रोजेक्ट को लक्षित किया और भाग लिया: Install-Package Microsoft.Data.Edm जिसने समस्या को हल किया।


मेरे पास एक ही त्रुटि संदेश था लेकिन मेरा मुद्दा किसी भी Azure उत्पाद से असंबंधित था। मेरे मामले में, मैंने संस्करण 3 से 4 तक ओडाटा अपडेट किया और मुझे ऐसा लगता है कि Nuget deprecated dll के लिए बाध्यकारी रीडायरेक्ट के पीछे छोड़ दिया गया है। वास्तव में कुल मिलाकर तीन थे, माइक्रोसॉफ्ट.डाटा.एडएम, माइक्रोसॉफ्ट.डाटा.ओडाटा और सिस्टम। सैटियल।

मेरा समाधान बहिष्कृत बाध्यकारी रीडायरेक्ट को हटाना था। यदि आपकी बिल्ड प्रक्रिया नहीं है तो आपको अपने बिन फ़ोल्डर में पुराने डीएल की बैठना भी हटा देना चाहिए।


मेरे लिए मुझे WindowsAzure.MobileServices.Backend.Entity NuGet पैकेज को अनइंस्टॉल करना पड़ा जो Microsoft.Data.Edm सहित कई असेंबली को हटा देता है। और फिर मैंने इसे फिर से स्थापित किया और चमत्कारी रूप से, यह काम किया!

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

आशा है कि ये आपकी मदद करेगा।


मैं आज भी इसी तरह के मामले से मिला, मेरी स्थिति में, बिल्ड हमेशा फ़ोल्डर को डीबग करने के लिए पुराने संस्करण डीएल की प्रतिलिपि बनाता है, कारण यह है कि मेरा प्रोजेक्ट इस डीएलएल को सीधे संदर्भित नहीं करता है, यह एक अन्य प्रोजेक्ट को रेफरी करता है जो इस डीएल को रेफर करता है।
तो जब निर्माण करें, तो मेरी परियोजना को जीएसी या अन्य जगह से पुराना संस्करण मिल जाएगा।
मैंने इसे सही स्थान से परियोजना में इस डीएलएल स्पष्ट संदर्भ द्वारा हल किया।
इस तरह:

<Reference Include="Microsoft.Data.Services.Client, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\packages\Microsoft.Data.Services.Client.5.6.1\lib\net40\Microsoft.Data.Services.Client.dll</HintPath>
</Reference>

यहां कुछ चीजें हैं जिन्हें आप आजमा सकते हैं:

  1. यह सुनिश्चित करने के लिए अपने पोस्ट बिल्ड इवेंट की जांच करें कि कोई Microsoft.Data.Edm.dll फ़ाइल मैन्युअल रूप से बिन फ़ोल्डर में कॉपी नहीं की जा रही है।
  2. सुनिश्चित करें कि अन्य संकुल Microsoft.Data.Edm 5.6.1 पर निर्भरता नहीं रखते हैं। ऐसा करने का आसान तरीका आपके पैकेज.कॉन्फिग फाइलों को देखकर है।
  3. यदि आपका कोड स्रोत नियंत्रण में है, तो सुनिश्चित करें कि कोई भी बिन फ़ोल्डर में जांच न करें। मुझे आश्चर्य है कि कितने लोग इस मूल नियम को नहीं जानते हैं।
  4. WindowsAzure.Storage और Microsoft.Data.Edm पैकेज अनइंस्टॉल करें। फिर दोबारा स्थापित करें और सुनिश्चित करें कि आप केवल स्थिर संस्करण स्थापित करें।

HTH।


विजुअल स्टूडियो को बंद करके और फिर से खोलकर इसे सफलतापूर्वक हल किया गया।






dll