2011-06-08 5 views
7

मैं इस कोड को कंसोल एप्लिकेशन में लिख रहा हूं जो .NET Framework 4 क्लाइंट प्रोफ़ाइल को लक्षित करता है।log4net 1.2.10 को System.Web की आवश्यकता क्यों है?

this.container.AddFacility<LoggingFacility>(
    f => f.LogUsing(LoggerImplementation.Log4net)); 

जब यह चलता है, तो यह एक प्रकार की रूपांतरण त्रुटि में विफल रहता है।

नहीं बदला जा सका 'Castle.Services.Logging.Log4netIntegration.Log4netFactory, Castle.Services.Logging.Log4netIntegration, संस्करण = 2.5.1.0, संस्कृति = तटस्थ, PublicKeyToken = 407dd0808d44fbdc' से System.Type के लिए - हो सकता है कि प्रकार नहीं पाया जा सका

इसका कारण यह है Castle.Services.Logging.log4netIntegration विधानसभा उत्पादन फ़ोल्डर में प्रतिलिपि नहीं है। रनटाइम-केवल निर्भरता के रूप में, यह निर्माण को तोड़ नहीं देता है।

बिल्ड प्रक्रिया को देखते हुए, मैंने पाया कि यह log4net या कैसल सुविधा असेंबली की प्रतिलिपि नहीं बना रहा क्योंकि वे System.Web पर निर्भर हैं जो क्लाइंट प्रोफ़ाइल में उपलब्ध नहीं है। मानक प्रोफ़ाइल में बदलना मतलब है कि यह निर्भरता उपलब्ध है और सुविधा को जोड़ा जा सकता है।

ऐसा क्यों किया जाता है? इससे कोई फर्क पड़ता है कि मैं किसी सर्वर पर शेड्यूल किए गए कार्य के रूप में उपयोग किए जाने वाले कंसोल एप्लिकेशन में क्लाइंट प्रोफ़ाइल को लक्षित नहीं कर रहा हूं?

उत्तर

7

कुछ परिशिष्ट System.Web जैसे AspNetTraceAppender पर निर्भर करते हैं। डेवलपर्स के लिए उपलब्ध एकमात्र अन्य विकल्प उन घटकों को विभाजित करना होगा जो अलग-अलग असेंबली में सिस्टम कोर पर निर्भर नहीं हैं, लेकिन यह लॉग 4नेट की सुंदरता को तोड़ देगा कि इसका उपयोग करना इतना आसान है। इसके अतिरिक्त log4net लिखने के समय मुझे विश्वास नहीं है कि वे एक ग्राहक प्रोफ़ाइल के रूप में ऐसी चीज थीं।

चूंकि log4net खुला स्रोत है, इसलिए आपको स्रोत डाउनलोड करने और अपमानजनक कक्षाओं को हटाने और अपनी खुद की ग्राहक प्रोफ़ाइल केंद्रित लॉग 4नेट असेंबली बनाने से रोक नहीं है।

http://www.thecodeking.co.uk/2010/08/making-log4net-work-with-net-client.html

  1. डाउनलोड log4net स्रोत
  2. ओपन & विजुअल स्टूडियो 2010
  3. का उपयोग कर समाधान का उन्नयन निकालें System.Web परियोजना संदर्भ
  4. परियोजना से appender \ AspNetTraceAppender.cs वर्ग को शामिल न करें
  5. सिस्टम का संदर्भ जोड़ें। कॉन्फ़िगरेशन
  6. प्रोजेक्ट पर नेविगेट करें -> log4net गुण, और एप्लिकेशन टैब का चयन करें
  7. लक्ष्य फ्रेमवर्क को .NET Framework 3 में बदलें।5 क्लाइंट प्रोफाइल
  8. बिल्ड टैब का चयन करें, और कॉन्फ़िगरेशन को डीबग
  9. में सशर्त संकलन प्रतीकों के तहत इसे नेट में बदलें; NET_1_0; NET_2_0;
  10. कॉन्फ़िगरेशन को
  11. सशर्त संकलन प्रतीकों के तहत इसे STRONG में बदलें; नेट; NET_1_0; NET_2_0;
  12. संपादित AssemblyInfo.cs वर्ग और अद्यतन AssemblyKeyFile एक वैध मजबूत कुंजी
  13. साथ विशेषता रिलीज मोड में परियोजना संकलित करें और नए विधानसभा वितरित एक अस्पष्ट प्रतिक्रिया की
+0

धन्यवाद ब्रोनुम्स्की। –

+1

अभी डाउनलोड की गई नवीनतम बाइनरी (1.2.11) और इसमें 4.0 क्लाइंट प्रोफाइल के साथ \ bin \ net-cp \ 4.0 \ रिलीज़ में एक संस्करण संगत है। बस इसका परीक्षण किया और एक आकर्षण की तरह काम करता है! – SvenG

-4

यहां मेरे विचार हैं: Log4Net System.Web का उपयोग करता है क्योंकि डेवलपर्स ने फैसला किया कि यह सबसे अच्छा विकल्प था।

यदि आप यह वजन नहीं चाहते हैं, तो एक लॉगिंग प्रोजेक्ट पर विचार करें जिसके लिए System.Web की आवश्यकता नहीं है। अन्य विकल्प हैं।

+0

बिट। अन्य लॉगिंग विकल्प क्या हैं? मैं केवल log4net या कोर डायग्नोस्टिक्स घटकों का उपयोग करता हूं। – Bronumski

+0

मुझे स्टैक ओवरफ़्लो 'AttemptKillOfReputation()' से प्यार है क्योंकि सभी होमवर्क मेरे लिए नहीं किया गया था। –

+8

मुझे लगा कि आपका उत्तर सहायक से अधिक बर्खास्त था। –

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