मैंने अभी एक मौजूदा परियोजना को एक ब्रांड नई मशीन पर कॉपी किया है ताकि उस पर विकास शुरू किया जा सके और मेरी एक संदर्भित असेंबलियों के संस्करण के साथ एक समस्या में चला गया (जैसा कि ऐसा होता है एक टेलीरिक डीएलएल)।
प्रोजेक्ट ने मूल रूप से असेंबली के पुराने संस्करण को संदर्भित किया (इसे v1.0.0.0 कहते हैं)। मेरी नई मशीन में असेंबली का नवीनतम संस्करण स्थापित है, इसलिए मैंने सोचा कि मैं इसे अपडेट कर दूंगा (नए संस्करण v2.0.0.0 को कॉल करने देता है)।
अब यहां समस्या है: यदि मैं पुराने v1.0.0.0 dll को प्रोजेक्ट फ़ोल्डर में कॉपी करता हूं और इसे एक संदर्भ के रूप में जोड़ता हूं, तो वेब साइट एक समस्या के बिना लॉन्च होती है। यदि मैं वह संदर्भ हटाता हूं (और अपने सिस्टम से पुराने DLL को भी हटाता हूं) और नया संस्करण (v2.0.0.0) जोड़ें, तो पृष्ठ निम्नलिखित अपवाद दिखाता है:
फ़ाइल या असेंबली को 'XXXXXX, संस्करण = 1.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = 121fae78165ba3d4' या उसकी किसी एक निर्भरता को लोड नहीं किया जा सका। स्थित असेंबली की प्रकट परिभाषा असेंबली संदर्भ से मेल नहीं खाती है। (HRESULT से अपवाद: 0x80131040)
स्पष्ट रूप से, कोड आउट ऑफ़ डेट संस्करण की तलाश कर रहा है और इसे नहीं पा सकता है। पर क्यों?
मैंने उस वर्जन नंबर के लिए सॉल्यूशन फोल्डर तैयार किया और एक भी रेफरेंस नहीं पा सका। मैंने .csproj फ़ाइल के पाठ की दोहरी जाँच की और पाया कि संस्करण सही ढंग से नवीनतम संस्करण दिखाता है और HintPath सही ढंग से नए DLL का मार्ग दिखाता है। इसके अलावा, क्योंकि मैंने पुराने डीएलएल को उस सिस्टम पर स्थापित नहीं किया था जो मेरे GAC में प्रदर्शित नहीं होता है (हालाँकि v2.0.0.0 उम्मीद के मुताबिक होता है)।
मैंने तब फ्यूजन लॉग व्यूअर को यह पता लगाने में सक्षम किया कि यह उस पुराने संस्करण की तलाश क्यों कर रहा है, लेकिन कोई भाग्य नहीं:
Assembly Load Trace: The following information can be helpful to determine why the assembly 'XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4' could not be loaded.
=== Pre-bind state information ===
LOG: User = MyComp\me
LOG: DisplayName = XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
(Fully-specified)
LOG: Appbase = file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/
LOG: Initial PrivatePath = d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\bin
Calling assembly : WebApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\web.config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/90233b18/10d54998/XXXXXX.DLL.
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/90233b18/10d54998/XXXXXX/XXXXXX.DLL.
LOG: Attempting download of new URL file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/bin/XXXXXX.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
सभी यह कहते हैं कि यह उस पुरानी विधानसभा की तलाश से शुरू होता है। मैंने ऑनलाइन एक समाधान खोजने की कोशिश की है और इस तरह के एसओ प्रश्न को देखा है , लेकिन यह मेरी समस्या के बिल्कुल विपरीत है। उस प्रश्नकर्ता के कार्यक्रम में संदर्भित डीएल के बजाय गलत डीएलएल पाया गया था। जबकि मेरी समस्या यह है कि प्रोग्राम रहस्यमय तरीके से गलत DLL की तलाश कर रहा है और जब कोई सही ढंग से बिन फ़ोल्डर और GAC में स्थानीय रूप से पाया जा सकता है तो इसे ढूंढने में असमर्थ है।
मेरा पुराने संस्करण की तलाश क्यों है? इस बुरे संदर्भ को खोजने के लिए मैं और कहां खोज कर सकता हूं?