2012-07-13 21 views
10

मेरे पास एक कंसोल एप्लिकेशन है जिसमें इसका अपना App.config है।App.config में AppSettings के मेरे परिवर्तनों को रन-टाइम में क्यों नहीं लिया जाता है? (कंसोल एप्लिकेशन)

मुझे समय-समय पर कुछ मानों को बदलने की आवश्यकता है।

मेरी समस्या यह है कि, जब मैं बिन/डीबग फ़ोल्डर के भीतर exe निष्पादित करता हूं तो यह प्रासंगिक एप्सेटिंग सही तरीके से प्राप्त करता है। लेकिन जब मैं कुछ कुंजी/मूल्य जोड़े के मानों को संपादित और परिवर्तित करता हूं और exe को पुन: चलाता हूं, तो यह अभी भी मूल मानों को पढ़ता है।

(फिर से चलाने के द्वारा मैं MyTool.exe फोन करके आदेश शीघ्र पर अनुप्रयोग चल मतलब)

मैं अपने मुख्य विधि की शुरुआत में

ConfigurationManager.RefreshSection("appSettings"); 

कॉल करने की कोशिश। लेकिन मदद नहीं की।

क्या आप सलाह दे सकते हैं? धन्यवाद

+0

क्या आप आईडीई के अंदर app.config संपादित करते हैं या आप सीधे BIN/DEBUG फ़ोल्डर में exe.config संपादित करते हैं? डीबग फ़ोल्डर में – Steve

+0

। आईडीई में नहीं। – pencilCake

+0

और संपत्ति पर मूल्य क्या है IDE के अंदर आपके app.config की आउटपुट निर्देशिका में कॉपी करें? – Steve

उत्तर

29

लेकिन जब मैं संपादित करें और कुछ कुंजी/मान जोड़े और फिर से चलाने के exe ​​के मूल्यों को बदल, यह अभी भी मूल मूल्यों पढ़ता है।

निर्भर करता है कि आप इस exe को फिर से कैसे चला रहे हैं। यदि आप इसे विजुअल स्टूडियो में कर रहे हैं, तो F5 पर क्लिक करके, वीएस बस आपके प्रोजेक्ट में app.config फ़ाइल को आउटपुट में कॉपी करता है और इसे AppName.exe.config पर पुनर्नामित करता है। इसलिए यदि आप अपने परिवर्तनों को ध्यान में रखना चाहते हैं तो आपको AppName.exe.config (App.config नहीं) संशोधित करना होगा और फिर विंडोज एक्सप्लोरर से निष्पादन योग्य चलाएं।

यह कहा जा रहा है कि, App.config केवल एक बार पढ़ा और पार्स किया जाता है। जब आवेदन शुरू होता है। जब भी आपका एप्लिकेशन कुछ मूल्य अनुरोध करता है तो महंगे एक्सएमएल पार्सिंग से बचने के लिए मूल्यों को कैश किया जाता है।

App.config को कॉन्फ़िगरेशन मानों को संग्रहीत करने के लिए डिज़ाइन किया गया है जिन्हें बदला जाना नहीं है। यदि आपको गतिशील रूप से कॉन्फ़िगरेशन मानों को बदलने की आवश्यकता है तो आपको कुछ अन्य स्टोरेज तंत्र का उपयोग करना चाहिए: फ़ाइल, डेटाबेस, ...

लेकिन ConfigurationManager.RefreshSection("appSettings"); विधि को काम करना चाहिए। एक बार जब आप AppName.exe.config फ़ाइल को संशोधित कर लेते हैं, तो आप इस विधि को कॉल करते हैं और फिर ConfigurationManager.AppSettings["someKey"]; का उपयोग करके आवश्यक मान को दोबारा दोहराएं जो आपको नया मान वापस लेना चाहिए।

+0

के अंतर्गत * .config फ़ाइल में अपडेट करने के लिए app.config में नए मानों के लिए F5 दबाएं। लेकिन अगर मैं चाहता हूं कि मैं जो कुछ मांगूं, वह हासिल कर लेगा। क्या यह संभव है? (सर्वोत्तम अभ्यास सलाह के लिए +1) – pencilCake

+0

री-रन से मेरा मतलब है कि MyTool.exe – pencilCake

+0

पर कॉल करके कमांड प्रॉम्प्ट पर एप्लिकेशन चला रहा है, एप्लिकेशन चालू होने पर इस फ़ाइल को संशोधित करने वाला कौन है? आवेदन स्वयं या कुछ अन्य बाहरी प्रक्रिया? –

0
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
// change ConnectionString in App.Config for Entity FrameWork Object.... 
//..... 
config.Save(); 

क्या आप कॉन्फ़िगरेशन फ़ाइल सहेज रहे हैं?