2009-04-15 10 views
9

जब मैं स्थानीय रूप से अपना एप्लिकेशन चलाता हूं तो यह मेरे लॉग 4नेट लॉग को उस स्थान पर लिखता है जिसे मैंने कॉन्फ़िगर किया है (यानी, <file value="${LOCALAPPDATA}\TEST\Logs\debug.log" />) बिना किसी समस्या के। हालांकि, जब मैं क्लिकऑन के माध्यम से अपना आवेदन तैनात करता हूं, तो लॉग फ़ाइल नहीं लिखी जा रही है।मैं क्लिकऑन के तहत अपनी लॉग 4नेट लॉग फ़ाइल कहां लिख सकता हूं?

मुझे पता है कि क्लिकऑन एप्लिकेशन सीमित कहां से लिख सकते हैं, लेकिन मैं इस धारणा के तहत था कि LOCALAPPDATA (उदा।, सी: \ उपयोगकर्ता \ मुझे \ AppData \ Local) उचित खेल था।

कोई भी विचार?

उत्तर

15
ClickOnce के साथ

, फ़ोल्डर नियम नियमित विंडोज क्षुधा के लिए की तुलना में कुछ अलग हैं। डेटा फ़ोल्डर, जहां क्लिकऑन सामग्री फ़ाइलों को तैनात किया जाता है, सी: \ उपयोगकर्ता \ me \ स्थानीय सेटिंग्स \ Apps \ 2.0 \ डेटा में स्थित है। उस फ़ोल्डर के नीचे क्रिप्टिक पहचानकर्ताओं के साथ कुछ सबफ़ोल्डर स्तर हैं।

तो दिए गए क्लिकऑन ऐप के लिए वास्तविक डेटा फ़ोल्डर ApplicationDeployment कक्षा का उपयोग करके सर्वोत्तम रूप से पुनर्प्राप्त किया जाता है। तुम भी IsNetworkDeployed संपत्ति की जाँच करता है, तो आप तैनात मोड में चला रहे हैं देखने के लिए चाहिए:

if (ApplicationDeployment.IsNetworkDeployed) 
{ 
    var dataDirectory = ApplicationDeployment.CurrentDeployment.DataDirectory; 
    ... 
} 

DataDirectory के बाद से ClickOnce द्वारा किया जाता है कोई रास्ता नहीं है कि आप अपने log4net config में उस पथ को हार्डकोड कर सकते हैं। मेरा सुझाव अनुप्रयोग स्टार्टअप पर फ़ाइल पथ प्रोग्रामेटिकल को संशोधित करना होगा।

foreach(var appender in LogManager.GetRepository().GetAppenders()) 
{ 
    var fileAppender = appender as FileAppender; 
    if (fileAppender != null) 
    { 
     fileAppender.File = 
      fileAppender.File.Replace("${LOCALAPPDATA}", dataDirectory); 
     fileAppender.ActivateOptions(); 
    } 
} 
+1

इससे आपकी समस्या का समाधान नहीं होता है, तो सुनिश्चित करें विन्यास फाइल बनाने (जैसे log4net.config) एक "डेटा फ़ाइल" के रूप में तैनात नहीं किया जा रहा है – Pakman

+1

क्या @Pakman कहा के समान, आप सुनिश्चित करने की आवश्यकता log4net.config फ़ाइल गुणों पर बिल्ड एक्शन लॉग 4net.config फ़ाइल को तैनात करने और आपके एप्लिकेशन द्वारा पढ़ने के लिए सामग्री (कोई नहीं नहीं) पर सेट है। http://stackoverflow.com/a/16433824/602585 – deadlydog

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