2012-03-22 18 views
32

हाल ही में हमारे डेटा ऑब्जेक्ट में log4net.dll जोड़ा गया। हमारे डेटा वस्तु पूरी तरह से बनाता है लेकिन जब आप कुछ भी है कि का संदर्भ बनाने की कोशिश हमारे डेटा आपको निम्न त्रुटि प्राप्त वस्तु:"त्रुटि के बीच संघर्ष को हल करने का कोई तरीका" कैसे ठीक करें?

No way to resolve conflict between "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" and "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905". Choosing "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" arbitrarily.

मैं निम्नलिखित thread कि मुझे सक्षम समस्या के बारे में और अधिक जानकारी प्राप्त करने के लिए मिला।

लॉग 4नेट का उपयोग हमारी परियोजना में विभिन्न प्रकार के लिए किया जाता है। उदाहरण के लिए, क्रिस्टल ने जीएसी में 1.2.9 इंस्टॉल किया। मुझे पता है कि infragictics 1.2.10 का उपयोग करता है।

हमारे पास एक विशिष्ट निर्देशिका है - इसे c:\references पर कॉल करें - जहां हम अपने सभी डीएलएस बनाते हैं और हमारे सभी एप्लिकेशन हमारे आंतरिक डीएलएस को संदर्भित करने के लिए उपयोग करते हैं। तो मैं विशेष रूप से हमारे डेटा ऑब्जेक्ट में c: \ references \ log4net.dll पर अपना संदर्भ सेट करता हूं जो संस्करण 1.2.11 है। जो अजीब है क्योंकि आपके ऊपर त्रुटि संदेश में 1.2.11 दिखाई नहीं देता है। डीएलएल विशिष्ट संस्करण के साथ संदर्भित है: = सही & स्थानीय कॉपी करें: = सही। मैंने लॉग 4net की निर्माण निर्देशिका & 1.2.11 को ठीक से स्थानांतरित किया है।

There was a conflict between "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" and "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905". 
    No way to resolve conflict between "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" and "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905". Choosing "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" arbitrarily. 
     References which depend on "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" [C:\Windows\assembly\GAC_32\log4net\1.2.10.0__692fbea5521e1304\log4net.dll]. 
      C:\Windows\assembly\GAC_MSIL\CrystalDecisions.Shared\13.0.2000.0__692fbea5521e1304\CrystalDecisions.Shared.dll 

    References which depend on "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905" [C:\Program Files (x86)\Business Objects\Common\4.0\managed\log4net.dll].   c:\references\DBObjectAdoNet.dll 
      Project file item includes which caused reference "c:\references\DBObjectAdoNet.dll". 

अद्यतन: अब तक एक ही रास्ता मैं त्रुटि को ठीक करने के लिए मिला DBObjectAdoNet.dll संदर्भित कुछ भी में log4net संदर्भ के लिए है

इसे यहाँ में मदद करता है, तो विस्तृत त्रुटि संदेशों में से कुछ हैं। यह वास्तव में हमारे लिए उपयोग करने योग्य समाधान नहीं है क्योंकि लगभग हमारे पूरे सिस्टम में सबकुछ इसका उपयोग करता है।

दूसरा अपडेट: जीएसी सोच में log4net डालने का प्रयास किया जो समस्या को ठीक करेगा लेकिन फिर भी नहीं जाएंगे।

तीसरा अद्यतन: मैंने माइक्रोसॉफ्ट को एक समर्थन कॉल किया है। वे चाहते हैं कि मैं असेंबली का उपयोग करें। लोडफ्रॉम() जो मैं बहुत ही संकोच करता हूं, क्योंकि हम एक आवेदन में 300,000 से अधिक कॉल करते हैं और प्रत्येक कॉल के लिए प्रतिबिंब की आवश्यकता होगी जो चीजों को धीमा कर देगा।

मुझे पता चला कि अगर मैं अपनी मशीन पर क्रिस्टल रनटाइम को अनइंस्टॉल करता हूं तो त्रुटि दूर हो जाती है जो बहुत समझ में नहीं आता है क्योंकि जहां तक ​​मैं कह सकता हूं, केवल एक चीज लॉग 4नेट 1.2.10.0 को हटा देती है जीएसी .NET फ्रेमवर्क 2.0 फ़ोल्डरों के तहत, इससे कोई फर्क नहीं पड़ता क्योंकि ऐप एक .NET Framework 4 ऐप है।

+0

'उद्धरण' मुझे पता चला कि अगर मैं अपनी मशीन '/ उद्धरण' पर क्रिस्टल रनटाइम को अनइंस्टॉल करता हूं - प्रश्न: ** क्रिस्टल रनटाइम **? क्या ** क्रिस्टल रनटाइम **? –

+0

@ रॉबर्ट क्रिस्टल 11 x86 .Net Framework 4 के लिए। मुझे लगता है कि जब मुझे समस्या थी तो x64 संस्करण के साथ भी यही बात हुई। – coding4fun

+0

मैंने लॉग 4नेट संस्करण का एक संदर्भ जोड़ा जो मैं उस परियोजना में चाहता था जो संघर्ष को हल करने में असमर्थ था और इससे समस्या हल हो गई। –

उत्तर

2

हमने पाया कि क्रिस्टल रनटाइम निश्चित रूप से समस्या थी। अगर हम %windir%\assembly पर log4net को अनइंस्टॉल करते हैं जो क्रिस्टल रनटाइम स्थापित है तो चेतावनी संदेश चला जाता है। अजीब बात यह है कि अगर मैं log4net की साइट से log4net 1.2.10 को जीएसी में स्थापित करता हूं तो चेतावनी संदेश फिर से दिखाई नहीं देता है। अगर कोई इसे समझा सकता है तो कृपया इस धागे में जोड़ें। क्रिस्टल ने अपनी खुद की मजबूत नाम कुंजी के साथ log4net पर हस्ताक्षर किए (सार्वजनिक कुंजी टोकन अलग है)।

log4net समस्या को ठीक करने की कुंजी यह है कि log4net एक ओपन सोर्स प्रोजेक्ट है।जिसका अर्थ है कि हम आसानी से एक अलग नाम के साथ स्रोत से डीएलएल बना सकते हैं। अभी तक इसे आजमाया नहीं है लेकिन इससे समस्या ठीक होनी चाहिए। जब भी हम log4net को अपडेट करना चाहते हैं, तो हमारे पास स्रोत से निर्माण का अतिरिक्त कदम होगा, लेकिन इस पर विचार करते हुए कि हम डीएल को अपडेट करने जा रहे हैं, यह एक बड़ा सौदा नहीं है।

+6

हमने विनाशकारी परिणामों के साथ उस दृष्टिकोण की कोशिश की। सीएलआर ने दोनों विधानसभाओं को खुशी से लोड किया, लेकिन दोनों में मौजूद आईएलओजी को हल नहीं कर सका। नतीजतन, हम आधे लॉगिंग खो दिया। –

+0

@ ब्रेंडाबेल खेद है कि यह आपके लिए काम नहीं कर रहा है। यह काम करता है लेकिन निश्चित रूप से हर कोई विन्यास अलग होने जा रहा है – coding4fun

14

संपादन के लिए अपनी प्रोजेक्ट फ़ाइल (.csproj सी # या .vbproj में) खोलने के लिए खोलें।

सुनिश्चित करें कि log4net संदर्भ Fully Qualified Type Name है, HintPath और SpecificVersion=True है।

<Reference Include="log4net, Version=1.2.11.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL"> 
    <HintPath>..\references\log4net.dll</HintPath> 
    <SpecificVersion>True</SpecificVersion> 
</Reference> 

फ़ाइल को सहेजें और पुनर्निर्माण करने का प्रयास करें।

+1

उत्तर के लिए धन्यवाद। यह दुर्भाग्य से यह काम नहीं किया की कोशिश की: <संदर्भ शामिल = "log4net, संस्करण = 1.2.11.0, संस्कृति = तटस्थ, PublicKeyToken = 669e0ddf0bb1aa2a, processorArchitecture = MSIL"> c: \ संदर्भ \ log4net.dll यह सच है झूठी coding4fun

+0

विपरीत पथ का प्रयास करें, कोई विशेष संस्करण उपलब्ध कराने: '<संदर्भ शामिल =" log4net "> झूठी ' – KMoraz

+1

नहीं है कि 'नहीं करता है टी – coding4fun

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