2009-04-20 19 views
6

लोड नहीं हो सका ठीक है, हमारे वेब सर्वरों में से किसी एक को हमारे लाइव सर्वर पर तैनात करते समय मुझे एक बहुत ही अजीब समस्या है।फ़ाइल या असेंबली 'log4net

हमारा एप्लिकेशन बहुत सारे कार्यों को लॉग इन करने के लिए लॉग 4नेट का उपयोग करता है और तैनात किए जाने के कुछ घंटों बाद हमें निम्नलिखित अपवाद मिलता है।

फ़ाइल या विधानसभा लोड नहीं कर सका log4net, संस्करण = 1.2.9.0, संस्कृति = तटस्थ, PublicKeyToken = b32731d11ce58905 'या अपनी निर्भरता में से एक। प्रवेश निषेध है।

यहां प्रासंगिक वेब.कॉन्फिग जोड़ हैं जिनका मैं उपयोग करता हूं।

<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
    </configSections> 

<log4net> 
    <appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <param name="File" value="D:\SomeLocation\Errorlog"/> 
     <param name="AppendToFile" value="true"/> 
     <param name="RollingStyle" value="Size"/> 
     <param name="maxSizeRollBackups" value="-1" /> 
     <param name="maximumFileSize" value="100MB" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/> 
     </layout> 
     <filter type="log4net.Filter.LevelRangeFilter"> 
     <param name="LevelMin" value="FATAL" /> 
     <param name="LevelMax" value="FATAL" /> 
     </filter> 
    </appender> 
    <appender name="BookingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <param name="File" value="D:\SomeLocation\BookingInfoLog"/> 
     <param name="AppendToFile" value="true"/> 
     <param name="RollingStyle" value="Size"/> 
     <param name="maxSizeRollBackups" value="-1" /> 
     <param name="maximumFileSize" value="100MB" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/> 
     </layout> 
     <filter type="log4net.Filter.LevelRangeFilter"> 
     <param name="LevelMin" value="INFO" /> 
     <param name="LevelMax" value="FATAL" /> 
     </filter> 
    </appender> 
    <root> 
     <level value="ALL"/> 
     <appender-ref ref="BookingLogFileAppender"/> 
     <appender-ref ref="ErrorLogFileAppender"/> 
    </root> 

    </log4net> 

यह एक डेव सर्वर को हमारे स्थानीय मशीन पर ठीक काम कर रहा है, लेकिन लाइव पर बस नहीं।

संयोग से ऐसा लगता है कि जेआईटी कंपाइलर वेब.कॉन्फिग अपडेट या ऐप पूल रीसायकल के बाद सर्वर पर चलता है, या यहां तक ​​कि केवल एक लंबी अवधि के बाद!

अद्यतन: हमारे लाइव सर्वर सभी स्थान किसी शेयर स्थान से चलाते हैं। मैं इस मुद्दे को किसी अन्य सर्वर पर शेयर से एप्लिकेशन चलाने के लिए दोहराने में कामयाब रहा। स्थानीय ड्राइव से चलाने के लिए साइट को सेट करते समय समस्या दूर हो जाती है लेकिन हमारी होस्टिंग को हमें शेयर से चलाने की आवश्यकता होती है। कोई भी विचार क्यों log4net को शेयर से चलने वाले मुद्दों की अनुमति होगी। फिर एप्लिकेशन (, पहले GAC में देखो तो स्थानीय) जब तक एक और JIT संकलन होता है

+0

मुझे आपके जैसा ही समस्या है। क्या आपने कभी इसके लिए समाधान प्राप्त किया है? – gabe

उत्तर

1

चेक संस्करण आप संकलन समय में बाँध (आपकी फ़ाइल संदर्भ) और संस्करण है कि क्रम में इस्तेमाल किया पहली बार चलाता है

आमतौर पर जीएसी में संस्करण आपके पास फ़ाइल संदर्भ के रूप में भिन्न संस्करण से अलग है। कृपया इसे जाँचे।

इसके अलावा सफाई ASP.NET अस्थायी निर्देशिका और निष्पादित आईआईएस पुनः आरंभ (सीएमडी का संकेत -> iisreset)

+0

लेकिन अगर हम जीएसी का संदर्भ नहीं देते हैं तो हम सिर्फ डीएलएल का संदर्भ देते हैं। शायद जीएसी की मेरी समझ गलत है? – Sheff

+0

संदर्भ असेंबली हमेशा बिल्ड-टाइम होता है, जीएसी हमेशा रनटाइम होता है। आपके सी # प्रोजेक्ट में संदर्भित असेंबली पर क्लिक करें। हस्ताक्षर को देखो। फिर जीएसी में देखें, जांचें कि विधानसभा का नाम वहां पंजीकृत है या नहीं। यदि ऐसा है, तो दोनों संस्करणों की जांच करें (जिसे आपने संदर्भित किया है और जीएसी में से एक)। जब वे भिन्न होते हैं तो आपको समस्या होती है –

5

probally स्पष्ट पूछ लेकिन मैं अपने बिन फ़ोल्डर में log4net.dll संभालने कर रहा हूँ सही संस्करण है?

यदि आपके पास एक से अधिक प्रोजेक्ट हैं जो एक ही डीएलएल के अलग-अलग संस्करणों का संदर्भ देते हैं, तो बाद के संस्करण के लिए पिछले संस्करण में डीएलएल की प्रतिलिपि बनाने के लिए असामान्य नहीं है।

मान लीजिए कि आपके पास लॉग 4नेट की एक से अधिक प्रतिलिपि है जो आपको सबसे अच्छा समाधान का समर्थन करने की आवश्यकता है, जो मुझे लगता है कि आप कॉन्फ़िगरेशन में प्रोबिंग जोड़ना चाहते हैं और इस संस्करण को किसी अन्य फ़ोल्डर में रखना है।

http://msdn.microsoft.com/en-us/library/823z9h8w.aspx

+0

दिलचस्प है, हमारे पास log4net का उपयोग कर उस सर्वर पर चल रही कई परियोजनाएं हैं। मुझे यकीन है कि वे एक ही संस्करण का उपयोग करते हैं, हालांकि, मैं आपके सुझाव का प्रयास करूंगा। यहां तक ​​कि स्थानीय ड्राइव से परियोजना को क्यों चलाना ठीक है, लेकिन शेयर से नहीं? – Sheff

+0

एक शेयर डिफ़ॉल्ट रूप से केवल आंशिक रूप से भरोसेमंद स्थान है, आप इसे पूर्ण विश्वास के लिए जोड़ सकते हैं, मैं कमांड प्रॉम्प्ट नाम भूल जाता हूं लेकिन ".NET Framework 2.0 कॉन्फ़िगरेशन" mmc स्नैप-इन है जो आपके लिए इसे कॉन्फ़िगर कर सकता है। क्या आप पुष्टि कर सकते हैं कि आपके बिन फ़ोल्डर में log4net का संस्करण संस्करण 1.2.9.0 है और सार्वजनिक कुंजी सही है? आप फ़ाइल पर राइट क्लिक कर सकते हैं और पता लगाने के लिए गुण चुन सकते हैं। –

+0

Altough मैंने log4net.dll को संदर्भ के रूप में उपयोग नहीं किया है, यह मेरे बिन फ़ोल्डर में था। एक बार हटा दिए जाने पर मुझे अब 500 त्रुटि नहीं मिली ... – Cerveser

8

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

+0

धन्यवाद। मुझे बस यह समस्या थी और आपके जवाब में मदद मिली। लेकिन, विचित्र रूप से पर्याप्त, मुझे विपरीत समस्या थी। मैंने "ट्रू" पर सेट किया गया "32-बिट एप्लिकेशन सक्षम करें", और जब मैंने इसे "गलत" पर सेट किया, तो फिर से काम करना शुरू कर दिया। – Bob

+0

नोट: प्रति मैट की टिप्पणी। क्रिस्टल रिपोर्ट्स log4net को कॉल कर रही थीं। –

0

मुझे लगता है कि आपके जेआईटी कंपाइलर के पास शेयर में कोई लेखन पहुंच नहीं है। ऐसा लगता है कि जेआईटी कंपाइलर समय-समय पर पूरी साइट को पुन: संकलित करता है, शायद जब यह पुनर्नवीनीकरण हो जाता है।

साइट विकल्प प्रीबिल्ट को तैनात करना एक विकल्प है। इस तरह कोई पुनर्मूल्यांकन नहीं है। दूसरा विकल्प यह है कि आप अपने हिस्से में जेआईटी शिकायतकर्ता को लेखन पहुंच देते हैं। संभावना है कि यह वही उपयोगकर्ता है जो आपकी वेब सेवा चलाता है, उदाहरण के लिए।सिस्टम, नेटवर्क सेवा या स्थानीय सेवा समूह या शायद IIS_ * उपयोगकर्ताओं में से एक ...

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