2011-01-10 27 views
12

मुझे अपने पेपैल एकीकरण के साथ एएसपी/सी # एप्लिकेशन में एक त्रुटि देखने के लिए कहा गया है। 'संस्करण = 1.2.0.30714, संस्कृति = तटस्थ, PublicKeyToken = b32731d11ce58905 log4net,' या अपनी निर्भरता में से एकफ़ाइल या असेंबली log4net या इसकी निर्भरताओं में से कोई भी लोड नहीं हो सका

फ़ाइल या विधानसभा लोड नहीं कर सका: पूर्ण में दिखाया गया त्रुटि,, है। स्थित असेंबली की स्पष्ट परिभाषा असेंबली संदर्भ से मेल नहीं खाती है। (HRESULT से अपवाद: 0x80131040)

मैं क्या समझ से, इसका मतलब है कि वास्तविक स्थित फ़ाइल (जो है, मेरे बिन निर्देशिका में log4net.dll) संस्करण कुछ विधानसभा विन्यास के आधार पर उम्मीद से मेल नहीं खाता। मेरी समस्या यह है कि मैं यह नहीं ढूंढ सकता कि इस फ़ाइल का संदर्भ कहाँ दिया जा रहा है।

मेरे पास साइट की वेब रूट निर्देशिका में सभी फ़ाइलों तक पहुंच है, और इस DLL का संदर्भ देने वाली किसी भी कॉन्फ़िगरेशन फ़ाइलों का पता नहीं लगा सकता है। गलत मिलान के कारण क्या हो रहा है यह निर्धारित करने के लिए मुझे और कहां देखना चाहिए?

एक नोट के रूप में, मैंने यह सुनिश्चित कर लिया है कि बिन निर्देशिका में डीएलएल का संस्करण अद्यतित है, लेकिन ऐसा लगता है कि ऐसा कुछ भी हल नहीं हुआ है।

उत्तर

9

आपको परियोजनाओं में संदर्भों को भी नियंत्रित करने की आवश्यकता है - संदर्भ असेंबली में संकलित किए गए हैं और लोडिंग का प्रयास करेंगे। मेरा अनुमान है, आपके पास log4net असेंबली का पुराना संदर्भ है लेकिन नवीनतम संस्करण का उपयोग कर रहे हैं।

+0

यह समझ में आता है। क्या मेरे पास यह देखने का कोई तरीका है कि परियोजना में कौन सा संदर्भ बनाया जा रहा है - संकलित परियोजना को देखते समय यह आमतौर पर कौन सी फाइल स्थित होगी? – Elie

+0

आपको संकलित प्रोजेक्ट को नहीं देखना चाहिए, लेकिन असम्पीडित एक - csproj फ़ाइल। अन्यथा, मुझे लगता है निर्भर करता है .exe (मार्क की पोस्ट में) मदद करेगा। – Femaref

+0

यह nuget संकुल में भी सत्यापित किया जा सकता है। यदि आपकी परियोजनाओं में से एक लॉगऑनेट संस्करण 1.2.3 संदर्भित करता है।4 और अन्य प्रोजेक्ट लॉग 4नेट संस्करण 5.6.7.8 की तलाश में हैं, तो आपको यह त्रुटि मिल जाएगी। (या कोई अन्य nuget संकुल)। बस उन संस्करणों से मेल खाते हैं, और आप जाने के लिए अच्छे हैं। – Krishna

1

मेरे पास विशिष्ट त्रुटि के बारे में कोई उपयोगी जानकारी नहीं है। हालांकि, यदि आपने इस प्रकार की समस्या के साथ मदद करने के लिए उन्हें कुछ उपयोगी उपयोगिताओं का उपयोग नहीं किया है, तो Dependency Walker और .NET Reflector हैं।

निर्भरता परीक्षक का उपयोग यह देखने के लिए किया जा सकता है कि log4net असेंबली द्वारा उपयोग किए जाने वाले अप्रत्याशित मॉड्यूल हैं या नहीं। और परावर्तक उपयोगिता असेंबली के बारे में सभी प्रकार की उपयोगी जानकारी दिखाती है (संस्करणों सहित, संदर्भित असेंबली, अलग किए गए कोड का उल्लेख नहीं करना)।

2

आपके पास शायद लॉग 4नेट का नवीनतम संस्करण है लेकिन एक ऐसा प्रोजेक्ट है जो पुराने को संदर्भित कर रहा हो। http://msdn.microsoft.com/en-us/library/eftw1fys.aspx

आप विशेष संस्करण नहीं जानते, तो रीडायरेक्ट करने के लिए, आप कर सकते हैं: आप एक <bindingRedirect>

आप यहाँ उनके बारे में अधिक जानकारी प्राप्त कर सकते का उपयोग करके नए संस्करण को संदर्भित करने के पुराने संस्करण को संदर्भित सभी विधानसभाओं मजबूर कर सकते हैं संस्करणों की एक श्रृंखला का भी उपयोग करें और उन्हें अपने विशिष्ट संस्करण में इंगित करें।

1

मैं भी इस समस्या में भाग गया और ऐसा होने का कारण यह था कि परियोजना, कुछ कारणों से, जीएसी से लॉग 4नेट खींच रही थी, इसलिए यह संभव है कि जीएसी में संस्करण संदर्भित संस्करण से मेल नहीं खाता आपकी परियोजना में

14

जब हम वीएस 2010 और .NET 4.0 में चले गए, तो हमें यह समस्या भी थी, हम लॉग 4नेट का उपयोग नहीं करते हैं, लेकिन मुझे संदेह है कि हम कुछ और उपयोग करते हैं (शायद क्रिस्टल रिपोर्ट्स?) और मुझे भी संदेह है एक डीएलएल है जिसका उपयोग हम 32-बिट डीएल के साथ भी करते हैं क्योंकि जब मैं आईआईएस में एप्लिकेशन पूल के लिए उन्नत सेटिंग्स के तहत "32-बिट एप्लिकेशन सक्षम करें" विकल्प को "सत्य" में बदल देता हूं, तो सबकुछ फिर से काम करता है।

+0

हाँ, मेरे लिए यह निश्चित रूप से क्रिस्टल रिपोर्ट के कारण है। – basher

+0

यह मजाकिया है। यह भी मेरे साथ हुआ - संदर्भ के लिए पूछना जो मेरा समाधान बिल्कुल उपयोग नहीं करता है। मेरा समाधान जो "काम करता है" बस VS2017 को पुनरारंभ करें। और मुझे पता है कि पहले लोड की गई परियोजना log4net का उपयोग करती है। लेकिन वर्तमान बिल्कुल नहीं। ऐसा लगता है कि वे कुछ अस्थायी फ़ाइलें या smth साझा करते हैं और एक संघर्ष है। – Saulius

4

हमारे वेब एप्लिकेशन के साथ हमें एक ही समस्या थी। हम प्राचीन .NET 1.1 32-बिट से .NET 4.0 64-बिट तक गए थे।

त्रुटि मैं अपने उपयोगकर्ता नियंत्रण के बारे में हमारी एक के भीतर प्राप्त किया गया था निम्नलिखित:

ASP.NET runtime error: Could not load file or assembly 'log4net' or one of its dependencies. An attempt was made to load a program with an incorrect format. 

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

आखिरकार, मैं यह समझने में सक्षम नहीं था कि कौन सी तीसरी पार्टी डीएलएल वास्तव में लॉग 4नेट का संदर्भ दे रही थी। मैंने बिल्डिंग के बाद नोटिस किया था कि एक log4net.dll को मेरी "बिन" निर्देशिका में कॉपी किया गया था और मैंने सही पर क्लिक किया और यह पता लगाया कि यह अपाचे फाउंडेशन से संबंधित था - http://logging.apache.org/log4net/

मैं बस नवीनतम log4net.dll डाउनलोड कर रहा हूं .NET 4 के लिए, इसे मेरे वेब एप्लिकेशन प्रोजेक्ट के संदर्भ के रूप में जोड़ा गया, फिर से संकलित किया गया और फिर उपयोगकर्ता नियंत्रण को फिर से खोल दिया गया और त्रुटि गायब हो गई।

log4net download

आशा इस

+0

मुझे एक ही समस्या थी..यह जीएसी से लॉग 4नेट का संदर्भ दे रहा था, इसलिए आपकी टिप्पणियों ने मुझे इसे ठीक करने में मदद की ... धन्यवाद – Munawar

0

मैं आईआईएस के अनुप्रयोग पूल सेटिंग्स में 32-बिट अनुप्रयोगों को सक्षम करने के मैट सलाह का पालन करने जा रहा था मदद करता है।

बाहर निकलता है मुझे अभी तक जाने की आवश्यकता नहीं है, जैसे ही मैंने कैसिनी से आईआईएस में स्विच किया, त्रुटि हल हो गई।

आईआईएस करने के लिए स्विच करने के लिए:

  1. विंडोज प्रोग्राम और सुविधाएँ में आईआईएस (भी सक्षम करने के लिए "ASP.NET XX" आईआईएस के तहत नोड> वर्ल्ड वाइड वेब सेवा> अनुप्रयोग विकास विशेषताएं सुनिश्चित करें)
  2. सक्षम करें प्रोजेक्ट प्रॉपर्टीज> वेब> स्थानीय आईआईएस वेब सर्वर का उपयोग करें> वर्चुअल निर्देशिका बनाएं (इसे करने के लिए व्यवस्थापक के रूप में VS चलाएं)।
  3. परियोजना बिल्ड> इस के बाद चलाने के लिए मेरे लिए

नहीं log4net त्रुटि।

मुझे नहीं पता कि मैं इसे क्यों प्राप्त कर रहा था क्योंकि मैं कहीं भी लॉग 4नेट का उपयोग नहीं करता हूं, लेकिन मुझे खुशी है कि यह चला गया है।

2

यहां एक ही त्रुटि है, यहां बताया गया है कि हमने कैसे ठीक किया है: अपाचे से नवीनतम .Net 4.0 log4net.dll डाउनलोड करना और मेरे लिए काम किए गए बिन फ़ोल्डर में संस्करण को बदलना। इसे स्थायी बनाने के लिए आपको अपनी परियोजना का संदर्भ जोड़ना चाहिए। यहां लिंक है: Apache

डाउनलोड, बैनरीज पर जाएं और नया कुंजी संस्करण चुनें। एक बार डाउनलोड हो जाने पर, .dll फ़ाइल को खोजने के लिए .Net 4.0 फ़ोल्डर पर नेविगेट करें।

0

इन उत्तरों को पढ़ने के बाद मैंने .csproj की जांच समाप्त कर दी और अनुभाग में 'Lib \ log4net.dll' के वास्तविक संदर्भ को ढूंढ लिया। मैंने इसे हटा दिया और प्रोजेक्ट संकलित किया।

संबंधित मुद्दे

 संबंधित मुद्दे