स्थित असेंबली की प्रकट परिभाषा असेंबली संदर्भ से मेल नहीं खाती है


751

मैं C # विंडोज फॉर्म एप्लिकेशन (विजुअल स्टूडियो 2005) में कुछ यूनिट टेस्ट चलाने की कोशिश कर रहा हूं, और मुझे निम्नलिखित त्रुटि मिलती है:

System.IO.FileLoadException: फाइल या असेंबली 'यूटिलिटी, वर्जन = 1.2.0.200, कल्चर = न्यूट्रल, PublicKeyToken = 764d581291d764f7' या इसकी किसी एक निर्भरता को लोड नहीं कर सका। स्थित असेंबली की प्रकट परिभाषा असेंबली संदर्भ से मेल नहीं खाती है। (HRESULT से अपवाद: 0x80131040) **

x.Foo.FooGO () पर

Foo.cs में x.Foo.Foo2 (स्ट्रिंग groupName_) पर: पंक्ति 123

F.FTests.cs में x.Foo.UnitTests.FooTests.TestFoo () पर: पंक्ति 98 **

System.IO.FileLoadException: फाइल या असेंबली 'यूटिलिटी, वर्जन = 1.2.0.203, संस्कृति = न्यूट्रल, PublicKeyToken = 764d581291d764f7' या उसकी किसी एक निर्भरता को लोड नहीं कर सका। स्थित असेंबली की प्रकट परिभाषा असेंबली संदर्भ से मेल नहीं खाती है। (HRESULT से अपवाद: 0x80131040)

मैं अपने संदर्भों में देखता हूं, और मेरे पास केवल एक संदर्भ है Utility version 1.2.0.203(अन्य एक पुराना है)।

इस DLL फ़ाइल के पुराने संस्करण को संदर्भित करने के लिए मैं क्या कर रहा हूँ, इस पर कोई सुझाव?

इसके अलावा, मुझे नहीं लगता कि मेरी हार्ड ड्राइव पर भी यह पुराना असेंबली है। क्या इस पुराने संस्करण की विधानसभा के लिए खोज करने के लिए कोई उपकरण है?


मेरे मामले में, ऐसा इसलिए हुआ क्योंकि मेरे पास एक ही DLL को विभिन्न संस्करणों के साथ लोड करने वाली दो परियोजनाएँ थीं। (उम्मीद है कि यह किसी की मदद करता है!)
मिगुएलम्पन

जवाबों:


461

.NET असेंबली लोडर:

  • 1.2.0.203 को खोजने में असमर्थ है
  • लेकिन एक 1.2.0.200 मिला

यह असेंबली जो अनुरोध किया गया था, उससे मेल नहीं खाता है और इसलिए आपको यह त्रुटि मिलती है।

सरल शब्दों में, यह उस विधानसभा को नहीं खोज सकता है जिसे संदर्भित किया गया था। सुनिश्चित करें कि इसे GAC या एप्लिकेशन पथ में डालकर सही असेंबली मिल सकती है। इसके अलावा https://docs.microsoft.com/archive/blogs/junfeng/the-located-assemblys-manifest-definition-with-name-xxx-dll-does-not-match-the-assembly-reference देखें


19
लेकिन जब मैं परियोजना के संदर्भों को देखता हूं, तो यह 1.2.0.203 की ओर इशारा करता है। कुछ भी नहीं लग रहा है 1.2.0.200 की ओर इशारा करते हैं
leora

128
वास्तव में - यह 1.2.0.203 की तलाश में है, लेकिन इसने 1.2.0.200 पाया । पता करें कि वह फ़ाइल कहाँ है और उसे सही संस्करण के साथ बदलें।
जॉन स्कीट

18
मैंने यहां एक समान प्रश्न पूछा और एक कार्यशील समाधान प्राप्त किया: stackoverflow.com/questions/4187907/…
माइकल ला वोई

13
संदर्भ संस्करण की जाँच करें, और उसके बाद देखें कि क्या संकुल में समान है
।config

4
यह संदेश मुझे हर बार भ्रमित करता है। ऐसा लगता है कि यह पीछे की ओर लिखा गया है। मुझे उम्मीद है कि आपने उस संस्करण के बारे में शिकायत की होगी जिसे आपने लोड करने के लिए कहा है, न कि उस संस्करण को जो इसे मिला। खुशी है कि मैं अकेला नहीं हूं जो गलत हो जाता है!
ग्रेग वुड्स

91

आप इस मुद्दे का निवारण करने के लिए कुछ चीजें कर सकते हैं। अपनी असेंबली (.dll) के लिए हार्ड ड्राइव को खोजने के लिए सबसे पहले विंडोज फाइल सर्च का उपयोग करें। एक बार जब आपके पास परिणामों की एक सूची हो, तो देखें-> विवरण चुनें ... और फिर "फ़ाइल संस्करण" जांचें। यह परिणाम की सूची में संस्करण संख्या प्रदर्शित करेगा, इसलिए आप देख सकते हैं कि पुराना संस्करण कहां से आ रहा है।

इसके अलावा, लार्स ने कहा, यह देखने के लिए कि कौन सा संस्करण सूचीबद्ध है, यह देखने के लिए अपने जीएसी की जांच करें। यह Microsoft आलेख बताता है कि GAC में पाई जाने वाली असेंबली एक बिल्ड के दौरान स्थानीय रूप से कॉपी नहीं की जाती है, इसलिए आपको सभी पुनर्निर्माण करने से पहले पुराने संस्करण को हटाने की आवश्यकता हो सकती है। (आपके लिए ऐसा करने के लिए एक बैच फ़ाइल बनाने पर नोट्स के लिए इस सवाल का जवाब देखें )

यदि आप अभी भी यह पता नहीं लगा सकते हैं कि पुराना संस्करण कहां से आ रहा है, तो आप fuslogvw.exe एप्लिकेशन का उपयोग कर सकते हैं जो बाइंडिंग विफलताओं के बारे में अधिक जानकारी प्राप्त करने के लिए विजुअल स्टूडियो के साथ जहाज करता है। Microsoft को इस उपकरण के बारे में जानकारी यहाँ है । ध्यान दें कि आपको HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\EnableLogरजिस्ट्री कुंजी को 1 पर सेट करके लॉगिंग को सक्षम करना होगा ।


19
मत भूलो कि फ़ाइल संस्करण असेंबलियों की पहचान का हिस्सा नहीं है। असेंबली संस्करण है, लेकिन फ़ाइल संस्करण के समान नहीं है!
लार्स ट्रूजेंस

अगर सेवाओं के लिए fuslogvw का उपयोग कर रहे हैं, तो blogs.msdn.com/b/junfeng/archive/2004/02/14/72912.aspx
Nick

फ़ाइल नाम की खोज से मेरी समस्या हल हो गई। मेरे पास मेरे अस्थाई ASP.Net फ़ोल्डर में dll का पुराना संस्करण था और InstallShield अप टू डेट संस्करण के बजाय इसका उपयोग कर रहा था! स्वच्छ समाधान, पुन: निर्माण, पुनरारंभ पीसी ने कुछ नहीं किया। स्थानीय रूप से ठीक काम किया और हर बार इसे तैनात किया गया।
जंपिंग जेजा

निर्माण के तुरंत बाद, मेरी साइट ठीक काम करती है, लेकिन थोड़ी देर बाद, यह समस्या फसलों की है।
शाविस

मैंने इसका उत्तर विधानसभा संस्करण कहने के बजाय संपादित किया।
वर्थि 7

60

मैं खुद इस समस्या में भाग गया, और मैंने पाया कि मुद्दा कुछ और था जो दूसरों ने चलाया है।

मेरे पास दो DLL थे, जो मेरा मुख्य प्रोजेक्ट संदर्भित कर रहा था: CompanyClasses.dll और CompanyControls.dll। मुझे एक रन-टाइम त्रुटि मिल रही थी:

फ़ाइल या असेंबली को लोड नहीं कर सका स्थित असेंबली की प्रकट परिभाषा असेंबली संदर्भ से मेल नहीं खाती है

परेशानी थी, मेरे पास 1.4.1 के संस्करण संख्या के साथ मेरे सिस्टम पर किसी भी CompanyClasses.dll फाइलें नहीं थीं। जीएसी में कोई नहीं, एप फोल्डर में कोई नहीं ... कहीं भी नहीं। मैंने अपनी पूरी हार्ड ड्राइव खोजी। सभी CompanyClasses.dll फाइलें मेरे पास थीं 1.4.2।

वास्तविक समस्या, मैंने पाया, कि CompanyControls.dll ने CompanyClasses.dll का 1.4.1 संस्करण संदर्भित किया। मैंने अभी-अभी CompanyControls.dll (इसे संदर्भ के बाद CompanyClasses.dll 1.4.2 होने के बाद) पुन: प्राप्त किया और यह त्रुटि मुझसे दूर हो गई।


2
+1 कुछ ऐसा ही मेरे साथ हुआ जब मेरे पास मेरा एक DLL है जो Caliburn Micro के पुराने संस्करण का संदर्भ देता है।
जेसन मैसी

मुझे भी, आपके अनुभव ने मुझे जकड़ लिया जहाँ मुझे देखने की आवश्यकता है और मैंने अपना मुद्दा ठीक कर लिया।
एसेन

एक और विकल्प CompanyControlsपरियोजना को खोलने के लिए होगा , CompanyClasses.dllसंदर्भ को राइट-क्लिक करें -> गुण ->SpecificVersion = false
BlueRaja - डैनी Pflughoeft

यह बहुत बार xamarin अनुप्रयोगों पर मामला है। मेरे पास xamarin.forms प्रोजेक्ट xamarin.droid प्रोजेक्ट से अलग था। मैंने अभी आपकी पोस्ट देखी और मैंने इसे पहचान लिया।
बैटमसी

अगर CompanyClasses.dll पर हस्ताक्षर किए गए हैं, तो SpecificVersion = falseअकेले इसे नहीं काटेंगे। तुम एक की आवश्यकता होगी bindingredirect
डेनिस स्किडमोर

53

निम्नलिखित किसी भी विधानसभा संस्करण को 3.1.0.0 संस्करण में पुनर्निर्देशित करता है। हमारे पास एक स्क्रिप्ट है जो इस संदर्भ को हमेशा App.config में अपडेट करेगी ताकि हमें इस मुद्दे से फिर कभी न निपटना पड़े।

प्रतिबिंब के माध्यम से आप असेंबली publicKeyToken प्राप्त कर सकते हैं और .dll फ़ाइल से ही इस ब्लॉक को उत्पन्न कर सकते हैं।

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <dependentAssembly>
    <assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="3.1.0.0" />
  </dependentAssembly>
</assemblyBinding>

ध्यान दें कि XML नाम स्थान विशेषता (xmlns) के बिना यह काम नहीं करेगा।


1
इसने मेरे लिए काम किया। मैंने 'newVersion = 3.3.3' को 'newVersion = 3.1.0' में बदल दिया
jward01

यदि आप इसे से बच सकते हैं, तो विद्रोही मार्ग से नीचे न जाएं। जब वह बग आपको काटने के लिए आता है तो वह मुश्किल से काटेगा।
बैंकेसन 14

1
मेरा मुद्दा यह था कि पुनर्निर्देश गैर-मौजूद विधानसभाओं की ओर इशारा कर रहे थे। App.Config ने मेरे द्वारा स्थापित किए गए नवीनतम NuGet पैकेज से असेंबली जानकारी रखी। जब मैंने बाद में इन पैकेजों को डाउनग्रेड किया, तो यह साफ नहीं हुआ। यह एक .NET मानक क्लास लाइब्रेरी थी जो 4.7.2 फ्रेमवर्क यूनिट टेस्ट प्रोजेक्ट द्वारा हिट हो रही थी। इकाई परीक्षण परियोजना की समस्या रनटाइम में प्रस्तुत की गई है ..
डी-सेक्ट

@ D- संप्रदाय सही है। यदि आपका स्रोत नियंत्रण इंगित करता है कि web.config में परिवर्तन हैं (क्योंकि आप अपने NuGets के साथ खेल रहे हैं) तो आप उन बाइंडिंग अप्रत्यक्ष को वहां से वापस करने में समझदार हो सकते हैं। डाउनग्रेडिंग नुगेट्स बाध्यकारी पुनर्निर्देशन को साफ नहीं करेंगे
bkwdesign

45

यदि आप Visual Studio का उपयोग कर रहे हैं, तो "क्लीन सोल्यूशन" आज़माएँ और फिर अपनी परियोजना का पुनर्निर्माण करें।


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

TFS से खींचने के बाद कई DLL के लिए इस समस्या का सामना किया। इस समाधान ने इसे मेरे लिए तय किया।
मिलो

3
मेरे लिए काम किया। बिन amd obj फ़ोल्डर को हटा दिया और समस्या को हल किया।
user1619480

धन्यवाद, मेरे लिए भी काम किया, बस बिन फोल्डर को हटाना।
कूकीज डॉग

मेरे लिए यह binफ़ोल्डर को हटाने के लिए पर्याप्त था । हैरानी की बात है, मैंने सफलता के बिना पहले साफ समाधान और पुनर्निर्माण समाधान की कोशिश की । कभी-कभी थोड़ा अजीब।
लायन

36

अन्य उत्तर मेरे लिए काम नहीं करेंगे। यदि आप संस्करण की परवाह नहीं करते हैं और आप चाहते हैं कि आपका ऐप चले तो संदर्भ पर राइट क्लिक करें और 'विशिष्ट संस्करण' को गलत पर सेट करें ... यह मेरे लिए काम करता है। यहां छवि विवरण दर्ज करें


8
उस सेटिंग का केवल संकलन समय पर प्रभाव होता है । इसे संकलित करने के बाद, इसे ठीक उसी विधानसभा संस्करण की आवश्यकता होगी जिसके साथ आपने इसे संकलित किया है। देखें stackoverflow.com/questions/24022134/...
लार्स Truijens

22

मैं बस इस मुद्दे पर भाग गया था और समस्या यह थी कि मेरे पास मेरे डिबग डायरेक्टरी में .dll की एक पुरानी प्रति थी। आप यह देखना चाहते हैं कि क्या आप इसे देख सकते हैं (जीएसी के बजाय)।


हम सिर्फ एक अलग सर्वर पर माइग्रेट करते हैं इस समस्या का कारण था कि हम बैकअप रखते हैं। बैकअप प्रतियों को हटाने के बाद काम किया। धन्यवाद :)
Jtuck

22

मैं अभी सभी के दिमाग को उड़ाने जा रहा हूं। । ।

<assemblyBinding>अपनी .config फ़ाइल से सभी संदर्भ हटाएं , और फिर NuGet पैकेज प्रबंधक कंसोल से यह कमांड चलाएँ:

Get-Project -All | Add-BindingRedirect

मेरे लिए भी काम किया। धन्यवाद
ओलेह Udovytskyi

आपने मेरा समय बचा लिया Ab
अब्दु इमाम

4
यह केवल तभी काम करता है जब पैकेज प्रबंधन प्रारूप
पैकेज.कॉन्फिग

1
आधिकारिक तौर पर मन उड़ा
BGilman

यह एक अच्छी छोटी चाल है
hexagod

21

मैंने एक NuGet पैकेज जोड़ा, केवल अपने आवेदन के एक ब्लैक-बॉक्स हिस्से को महसूस करने के लिए लाइब्रेरी के पुराने संस्करण का उल्लेख कर रहा था।

मैंने पैकेज को हटा दिया और पुराने संस्करण की स्थिर DLL फ़ाइल को संदर्भित किया, लेकिन web.config फ़ाइल को कभी भी अपडेट नहीं किया गया था:

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

जब मैंने पैकेज को अनइंस्टॉल किया तो उसे क्या करना चाहिए था:

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

मैंने यह देखा है कि जब आप NuGet का उपयोग करते हैं तो कम से कम Entity Framework मॉड्यूल के लिए, यदि आप अपने समाधान पर राइट-क्लिक करते हैं, तो समाधान के लिए प्रबंधित NuGet पैकेज पर जाएं, फिर संकुल स्थापित करें> सभी, उस मॉड्यूल का चयन करें, प्रबंधित करें का चयन करें, आप कर सकते हैं आमतौर पर अपनी परियोजना से इसे हटा दें। यह मैन्युअल रूप से ऐसा करने के बिना इस तरह की चीजों को साफ करना चाहिए --- यह मानते हुए कि विक्रेता ने उनका उचित परिश्रम किया। लेकिन स्पष्ट रूप से अच्छी पकड़ के रूप में कभी-कभी वे नहीं करते हैं, अगर ऐसा है तो आपने इसे हटा दिया है
vapcguy

20

मेरे मामले में, ASP.NET अनुप्रयोग चलाते समय यह त्रुटि हुई। समाधान यह था:

  1. हटाएँ objऔर binप्रोजेक्ट फ़ोल्डर में फ़ोल्डर

साफ काम नहीं किया, पुनर्निर्माण काम नहीं किया, सभी संदर्भ ठीक थे, लेकिन यह पुस्तकालयों में से एक नहीं लिख रहा था। उन निर्देशिकाओं को हटाने के बाद, सब कुछ पूरी तरह से काम किया।


3
धन्यवाद, लेवी फुलर। यह उत्तर अधिक होना चाहिए; मेरी स्थिति के लिए यह जगह पर था! मेरे लिए यह त्रुटि तब शुरू हुई जब मैंने अपने web.config की एक बैकअप प्रति बनाई और विजुअल स्टूडियो ने इस विन्यास फाइल को वास्तविक विन्यास के बजाय लोड करना जारी रखा, तब भी जब मैंने डुप्लिकेट कॉपी को हटा दिया। इससे यह हल हो गया। धन्यवाद।
ब्रूसहिल

मेरे लिए भी काम करता है। फिर भी अनिश्चित है कि यह काम क्यों करता है :(
कंगारू

14

मेरे मामले में यह C: \ WINDOWS \ Microsoft.NET \ Framework \ ~ \ Temporary ASP.NET Files \ Directory में DLL का एक पुराना संस्करण था। आप या तो पुराने संस्करण को हटा सकते हैं या बदल सकते हैं, या आप अपने प्रोजेक्ट में DLL के संदर्भ को वापस निकाल और जोड़ सकते हैं। असल में, किसी भी तरह अस्थायी ASP.NET फ़ाइलें एक नया सूचक बनाएगा।


2
मेरे लिए यह तब काम किया जब मैंने विजुअल स्टूडियो को बंद कर दिया, IIS को बंद कर दिया और सभी ASP.NET फ़ाइलों को हटा दिया। नोट 64 बिट मशीन पर, साथ ही .NET 2.0 और 4.0 फ़ोल्डरों में फ्रेमवर्क और फ्रेमवर्क 64 फ़ोल्डर में फाइलें हो सकती हैं!
ब्रायन बी

मैंने अपने समाधान द्वारा बनाए गए सभी DLL को खोजने के लिए Windows स्टार्ट मेनू खोज फ़ंक्शन का उपयोग किया और फिर जहाँ भी वे पाए गए, बहुत सारे हटा दिए। मैं बिना किसी डर के ऐसा कर सकता था क्योंकि उन्हें केवल मेरे विजुअल स्टूडियो डिबगिंग के दौरान बनाया जाना चाहिए। जैसा कि वीएस ऐसे लापता डीएलएल का पुनर्निर्माण करेगा और मेरे समाधान के बाहर कुछ भी उन्हें संदर्भित नहीं करना चाहिए, यह मेरे लिए "सुरक्षित" ऑपरेशन था।
जारेफेथ

8

हमारे लिए, समस्या कुछ और के कारण हुई थी। DevExpress घटकों के लिए लाइसेंस फ़ाइल में दो पंक्तियों को शामिल किया गया था, एक घटक के पुराने संस्करण के लिए जो इस विशेष कंप्यूटर पर स्थापित नहीं था। लाइसेंस फ़ाइल से पुराने संस्करण को हटाने से समस्या हल हो गई।

कष्टप्रद हिस्सा यह है कि त्रुटि संदेश ने संकेत नहीं दिया कि किस संदर्भ में समस्याएं पैदा हो रही थीं।


2
मेरे मामले में, नए DevExpress वर्जन में अपग्रेड करने के बाद, फॉर्म की .resx फाइल में पुराने अनइंस्टॉल किए गए लाइब्रेरी वर्जन के संदर्भ होते हैं। मुझे कोड दृश्य में .resx को खोलना था और या तो संस्करण को नए में सही करना था या अमान्य प्रविष्टियों को हटाना था।
आर्टेमिक्स

5

यदि आप असेंबली को मजबूत-नाम प्राप्त करने के लिए बाध्य कर रहे हैं या इसके सार्वजनिक-कुंजी टोकन को बदल दिया गया है, तो ठीक उसी त्रुटि को फेंक दिया जाता है, जब आप प्रतिबिंब का उपयोग करके देर से बाँधने का प्रयास करते हैं। त्रुटि समान है, भले ही वास्तव में निर्दिष्ट सार्वजनिक कुंजी टोकन के साथ कोई भी विधानसभा नहीं मिली है।

आपको त्रुटि को हल करने के लिए सही सार्वजनिक कुंजी टोकन जोड़ने की आवश्यकता है (आप इसे dll पर sn -T का उपयोग करके प्राप्त कर सकते हैं)। उम्मीद है की यह मदद करेगा।


1
कृपया विस्तृत करें - "स्न-टी" क्या है? और मैं सार्वजनिक कुंजी टोकन कहां जोड़ूं?
मोरिट्ज़ दोनों

3
"sn.exe" एक उपकरण है जो विज़ुअल स्टूडियो के साथ आता है, यह एक कमांड लाइन टूल है जिसे विज़ुअल स्टूडियो कमांड प्रॉम्प्ट से चलाया जा सकता है। बस Visual Studio कमांड प्रॉम्प्ट (प्रारंभ मेनू से) चलाएं, उस फ़ोल्डर पर जाएं जिसमें आपकी असेंबली हो, और "sn -T <विधानसभा>" टाइप करें जहां <विधानसभा> dll का पूरा नाम है। यह विधानसभा "टोकन" की जानकारी प्राप्त करता है। एक बार जब आपके पास यह हो जाए, जब आप प्रतिबिंब के साथ देर से बाध्यकारी कर रहे हैं, तो विधानसभा आईडी स्ट्रिंग में टोकन जानकारी दर्ज करें (जैसे, "असेंबली = MyAssembly.dll, सार्वजनिक कुंजी टोकन = <टोकन गाइड>)
लड़के स्टारबक

2
इस उत्तर के लिए धन्यवाद। मेरे App.ini में कॉन्फ़िगरेशन अनुभाग का संदर्भ देते समय मुझे यह त्रुटि मिली थी। मैंने हाल ही में असेंबली पर हस्ताक्षर किए थे, इसलिए PublicKeyToken = null को नए (सही) टोकन के साथ अपडेट किया जाना था।
लियाम

5

मेरा नाथन बेडफोर्ड द्वारा पोस्ट के लिए एक बहुत ही समान स्थिति थी लेकिन एक मामूली मोड़ के साथ। मेरी परियोजना ने भी दो तरीकों से परिवर्तित dll को संदर्भित किया। 1) प्रत्यक्ष और 2) परोक्ष रूप से एक घटक (कक्षा पुस्तकालय) का संदर्भ देकर जो स्वयं को परिवर्तित dll का संदर्भ देता था। अब घटक (2) के लिए मेरे विज़ुअल स्टूडियो प्रोजेक्ट ने बदले हुए dll के सही संस्करण को संदर्भित किया। हालाँकि स्वयं ही संस्करण का संस्करण संख्या परिवर्तित नहीं किया गया था। और परिणामस्वरूप प्रोजेक्ट के नए संस्करण की स्थापना क्लाइंट मशीन पर उस घटक को बदलने में विफल रही।

अंतिम परिणाम: प्रत्यक्ष संदर्भ (1) और अप्रत्यक्ष संदर्भ (2) ग्राहक मशीन पर परिवर्तित dll के विभिन्न संस्करणों की ओर इशारा कर रहे थे। मेरी देव मशीन पर यह ठीक काम किया।

संकल्प: आवेदन निकालें; एप्लिकेशन फ़ोल्डर से सभी DLLS हटाएं; मेरे मामले में इसे फिर से स्थापित करें।


4

मैं किसी को अपनी कतरनी मूर्खता से लाभ उठाने दूँगा। मेरे पास पूरी तरह से अलग एप्लिकेशन के लिए कुछ निर्भरताएं हैं (चलो इस App1 को कॉल करें)। उस App1 से dll को मेरे नए एप्लिकेशन (App2) में खींच लिया गया है। जब भी मैं APP1 में अपडेट करता हूं, मुझे नया dll बनाना होगा और उन्हें App2 में कॉपी करना होगा। कुंआ। । । मैं 2 अलग-अलग App1 संस्करणों के बीच कॉपी और पेस्ट करने से थक गया, इसलिए मैंने बस dll के लिए एक 'NEW_' उपसर्ग जोड़ा।

कुंआ। । । मैं अनुमान लगा रहा हूं कि निर्माण प्रक्रिया / बिन फ़ोल्डर को स्कैन करती है और जब यह गलत तरीके से कुछ मेल खाता है, तो यह उसी त्रुटि संदेश के साथ बारफ करता है जैसा कि ऊपर उल्लेखित है। मैंने अपने "new_" संस्करणों को हटा दिया और इसे सिर्फ बांका बनाया।


4

मेरा मुद्दा स्रोत कोड को किसी भी संदर्भित विधानसभाओं पर खींचे बिना एक नई मशीन में कॉपी कर रहा था।

कुछ भी नहीं जो मैंने त्रुटि को ठीक किया, इसलिए जल्दबाजी में, मैंने बिन निर्देशिका को पूरी तरह से हटा दिया। मेरे स्रोत कोड का पुनर्निर्माण किया, और यह तब से बाहर काम किया।


4

मैं सिर्फ यह जोड़ना चाहूंगा कि मैं एक मूल ASP.NET MVC 4 प्रोजेक्ट बना रहा था और NuGet के माध्यम से DotNetOpenAuth.AspNet जोड़ा। Microsoft के लिए एक बेमेल DLL फ़ाइल संदर्भित करने के बाद यह एक ही त्रुटि का परिणाम है। Web.ebPages.OAuth।

इसे ठीक करने के लिए मैंने एक किया Update-Packageऔर एक पूर्ण पुनर्निर्माण के लिए समाधान को साफ किया।

यह मेरे लिए काम किया और एक आलसी तरीका है, लेकिन समय पैसा है :-P


1
मेरे लिए भी ऐसा ही जवाब। Update-Package -reinstallएक ही संस्करण में सभी NuGet संकुल को पुनः स्थापित करता है।
जेस

1
यह भी खूब रही; पोस्ट करने का शुक्रिया। मैंने इन सभी अन्य महान सुझावों की कोशिश की, लेकिन यह समाधान था जिसने चाल चली। उन लोगों के लिए धन्यवाद, जो अभी भी वैकल्पिक समाधान पोस्ट करने के लिए तैयार हैं, तब भी जब उनमें से 80 उपलब्ध हों
हैमोन

4

टीम फाउंडेशन सर्वर की बिल्ड-सर्विस पर निर्माण करते समय मुझे यह त्रुटि मिली। यह पता चला कि मेरे पास NuGet के साथ जोड़े गए एक ही पुस्तकालय के विभिन्न संस्करणों का उपयोग करके मेरे समाधान में कई परियोजनाएं थीं। मैंने NuGet के साथ सभी पुराने संस्करणों को हटा दिया और नए को सभी के लिए संदर्भ के रूप में जोड़ा।

टीम फाउंडेशन सर्वर सभी DLL फ़ाइलों को एक निर्देशिका में रखता है, और निश्चित रूप से एक निश्चित नाम की केवल एक DLL फ़ाइल हो सकती है।


एक और तरीका है "समाधान के लिए NuGet पैकेज प्रबंधित करें ..." पर क्लिक करें और अपने परीक्षण प्रोजेक्ट और प्रोजेक्ट दोनों को उसी (नवीनतम) संस्करण में परीक्षण के तहत अपडेट करें।
lixonn

4

मेरे app.config एक शामिल हैं

<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.11.0"/>

npgsql के लिए। किसी तरह उपयोगकर्ता की मशीन पर, मेरा app.exe.config गायब हो गया। मुझे यकीन नहीं है कि यह एक मूर्खतापूर्ण उपयोगकर्ता, इंस्टॉलर गड़बड़, या अभी तक एंटी-वायरस को मिटा दिया गया था। फ़ाइल को प्रतिस्थापित करने से समस्या हल हो गई।


3

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

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


3

मेरे लिए "Local.testtesttings" फ़ाइल में कोड कवरेज कॉन्फ़िगरेशन समस्या का कारण बना। मैं उन फ़ाइलों को अद्यतन करना भूल गया जो वहां संदर्भित थीं।


3

बस अपनी परियोजना के बिन फ़ोल्डर की सामग्री को हटाने और समाधान का पुनर्निर्माण मेरी समस्या हल हो गई।


1
वैसे आप क्या जानते हैं, आपने मुझे मेरा दुख दूर करने में मदद की, धन्यवाद वास्तव में
Ronny Mahlangu

2

समाधान को साफ और पुनर्निर्माण करने से आउटपुट निर्देशिका से सभी dll को प्रतिस्थापित नहीं किया जा सकता है।

मैं सुझाव दूंगा कि फ़ोल्डर को "बिन" से "ओल्डबिन" या "ओब्ज" से "ओल्डोबज" में बदलने का प्रयास किया जाए।

और फिर अपनी चुप्पी फिर से बनाने की कोशिश करें।

अगर आप किसी थर्ड पार्टी dll का उपयोग कर रहे हैं, तो आपको सफल निर्माण के लिए नए बनाए गए "बिन" या "obj" फ़ोल्डर में कॉपी करना होगा।

आशा है कि यह आपके लिए काम करेगा।


1

फ़ोल्डर असेंबली से पुरानी असेंबली को मैन्युअल रूप से हटाने और फिर नई असेंबली का संदर्भ जोड़ने से मदद मिल सकती है।


1

मुझे वही त्रुटि मिली ... मेरे मामले में यह निम्नानुसार हल हो गई:

  • पहले जब एप्लिकेशन इंस्टॉल किया गया था तब यहां के लोगों ने एप्लिकेशन में Microsoft एंटरप्राइज़ लाइब्रेरी 4.1 का उपयोग किया था।
  • पिछले सप्ताह में मेरी मशीन को प्रारूपित किया गया था और उसके बाद आज जब मैंने उस एप्लिकेशन का निर्माण किया, तो उसने मुझे एक त्रुटि दी कि एंटरप्राइज लाइब्रेरी असेंबली गायब है।
  • फिर मैंने Microsoft एंटरप्राइज़ लाइब्रेरी 5.0 स्थापित की, जो मुझे पहली खोज प्रविष्टि के रूप में Google पर मिली।
  • फिर जब मैंने एप्लिकेशन का निर्माण किया तब इसने मुझे उपरोक्त त्रुटि दी अर्थात विधानसभा की प्रकट परिभाषा विधानसभा संदर्भ से मेल नहीं खाती।
  • बहुत खोज और विश्लेषण के बाद, मैंने पाया कि आवेदन 4.1.0.0 का उल्लेख कर रहा था और बिन फ़ोल्डर में DLL संस्करण 5.0.0.0 का था
  • मैंने जो किया था, उसके बाद मैंने Microsoft एंटरप्राइज़ लाइब्रेरी 4.1 स्थापित किया।
  • पिछला संदर्भ (5.0) निकाला और 4.0 संदर्भ जोड़ा।
  • एप्लिकेशन और वोइला निर्मित ... यह काम किया।

1

यहाँ इस मुद्दे को ठीक करने का मेरा तरीका है।

  1. अपवाद संदेश से, "समस्या" लाइब्रेरी का नाम और "अपेक्षित" संस्करण संख्या प्राप्त करें।

यहां छवि विवरण दर्ज करें

  1. अपने समाधान में उस .dll की सभी प्रतियां खोजें , उन पर राइट-क्लिक करें और यह देखें कि .dll का कौन सा संस्करण है।

यहां छवि विवरण दर्ज करें

ठीक है, इसलिए इस उदाहरण में, मेरा .dll निश्चित रूप से 2.0.5022.0 है (इसलिए अपवाद संस्करण संख्या गलत है)।

  1. उस संस्करण संख्या की खोज करें जो आपके समाधान में .csproj फ़ाइलों में सभी अपवाद संदेश में दिखाई गई थी । इस संस्करण संख्या को वास्तविक संख्या से dll से बदलें।

इसलिए, इस उदाहरण में, मैं इसे प्रतिस्थापित करूंगा ...

<Reference Include="DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

... इसके साथ...

<Reference Include="DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

काम हो गया !


क्या होगा अगर मेरी csproj फ़ाइलों का कोई संस्करण संदर्भित नहीं है?
जॉन डेमेट्रियौ

1

मेरे मामले में समस्या कुर्सी और कीबोर्ड के बीच थी :-)

Could not load file or assembly 'DotNetOpenAuth.Core, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=2780ccd10d57b246' or one of its dependencies.
The located assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040)

दो या अधिक अलग-अलग असेंबली DotNetOpenAuth लाइब्रेरी के एक अलग संस्करण का उपयोग करना चाहते थे, और यह एक समस्या नहीं होगी। इसके अलावा, मेरे स्थानीय कंप्यूटर पर एक web.config स्वचालित रूप से NuGet द्वारा अपडेट किया गया था:

<dependentAssembly>
    <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
    </dependentAssembly>
    <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>

तब मुझे महसूस हुआ कि मैं नए web.config को प्रोडक्शन सर्वर पर कॉपी / तैनात करना भूल गया था। इसलिए यदि आपके पास web.config को तैनात करने का मैनुअल तरीका है, तो जांच लें कि यह अपडेट है। यदि आपके पास उत्पादन सर्वर के लिए पूरी तरह से अलग web.config है, तो आपको NuGet का उपयोग करने के बाद सिंक में इन dependAssembly अनुभाग को मर्ज करना होगा।


1

यदि आपको कभी भी कोई त्रुटि मिलती है जैसे " स्थित असेंबली की मैनिफ़ेस्ट परिभाषा विधानसभा असेंबली संदर्भ से मेल नहीं खाती " और यदि आपने प्रोजेक्ट के माध्यम से अपडेट किया है > NuGet पैकेज और अपडेट टैब को VS में प्रबंधित करें , तो पहली चीज़ जो आप कर सकते हैं वह है दूसरे संस्करण को स्थापित करने का प्रयास पैकेज NuGet गैलरी पृष्ठ से संस्करणों की जाँच करने और पैकेज प्रबंधक कंसोल से फ़ॉल्विंग कमांड चलाने के बाद:

PM> Install-Package YourPackageName -Version YourVersionNumber 
//Example
PM> Install-Package Microsoft.Extensions.FileProviders.Physical -Version 2.1.0

यद्यपि उत्तर सीधे तौर पर प्रश्न में पैकेज से संबंधित नहीं है और इसे वापस करने के लिए कहा गया था, यह एक तरह से सामान्य है, अभी भी प्रासंगिक है और आशा है कि यह किसी की मदद करता है।


1

मेरे लिए कोई समाधान काम नहीं आया। मैंने स्वच्छ परियोजना समाधान की कोशिश की, बिन हटाओ, अद्यतन पैकेज, डाउनग्रेड पैकेज और इतने पर ... दो घंटे के बाद मैंने विधानसभा से डिफ़ॉल्ट App.config को विधानसभाओं के साथ लोड किया और वहां से मैंने गलत संदर्भ संस्करण बदल दिया:

<dependentAssembly>
    <assemblyIdentity name="Microsoft.IdentityModel.Logging" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
</dependentAssembly>

सेवा:

<dependentAssembly>
    <assemblyIdentity name="Microsoft.IdentityModel.Logging" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.14.0.0" newVersion="5.5.0.0" />
</dependentAssembly>

इसके बाद मैंने प्रोजेक्ट को साफ किया, इसे फिर से बनाया और यह काम किया। कोई चेतावनी नहीं कोई समस्या नहीं।


0

मुझे यह त्रुटि संदेश किसी असेंबली को संदर्भित करने के कारण मिला, जिसका नाम उसी प्रकार था जैसे कि मैं जो असेंबली बना रहा था।

यह संकलित है, लेकिन यह वर्तमान प्रोजेक्ट असेंबली के साथ संदर्भित विधानसभा को ओवरराइड करता है - इस प्रकार त्रुटि का कारण बनता है।

इसे ठीक करने के लिए मैंने परियोजना का नाम बदल दिया, और परियोजना पर राइट-क्लिक करने और 'गुण' चुनने के माध्यम से उपलब्ध विधानसभा गुण।

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