2010-03-17 15 views
8

को पुनः लोड करने के लिए मुझे इसे संशोधित करने के बाद कॉन्फ़िगरेशन फ़ाइल को फिर से लोड करने की आवश्यकता है। ऐपडोमेन का उपयोग करके यह कैसे किया जा सकता है? एक कोड नमूना उपयोगी होगा।.NET कॉन्फ़िगरेशन फ़ाइल

+0

हम वास्तव में करने के बाद कॉन्फ़िग फ़ाइल को फिर से लोड करने की आवश्यकता है इसमें कुछ बदलाव हैं!?, मुझे नहीं पता, मैं सिर्फ पूछ रहा हूं, क्योंकि मुझे कुछ पढ़ना याद है जहां हमें पुनः लोड करने की आवश्यकता नहीं है। धन्यवाद! –

+0

यह किस प्रकार का कार्यक्रम है? विंडोज सेवा? ASP.NET? –

+0

रन-टाइम के दौरान बाहरी कॉन्फ़िगरेशन फ़ाइल से कॉन्फ़िगरेशन सेटिंग्स को पुनः लोड करने के संभावित डुप्लिकेट] (http://stackoverflow.com/questions/4934898/reload-configuration-settings-from-an-external-config-file-during-run -टाइम) –

उत्तर

1

हां, यह संभव है ... पर निर्भर करता है आप अपनी कॉन्फ़िगरेशन फ़ाइल तक पहुंचते हैं।

यदि आप डिफ़ॉल्ट व्यवहार पर भरोसा करते हैं, तो उत्तर NO है।

हालांकि, अगर आप static अपनी प्रोजेक्ट के लिए सामान्य विधि की प्रॉपर्टी के माध्यम से कॉन्फ़िगरेशन तक पहुंचते हैं, तो इसे फिर से लोड करना संभव है।

मेरे पास अब मेरे साथ कोड स्निपेट नहीं है, लेकिन config फ़ाइल में परिवर्तनों का पता लगाने के लिए मैंने FileSystemWatcher का उपयोग करके कुछ ऐसा ही किया।

एक चेतावनी है, यह केवल उन गुणों के साथ काम करता है जिन्हें आप सीधे अपने कोड के माध्यम से एक्सेस करते हैं, जब आप ऐसा करते हैं तो स्वचालित कॉन्फ़िगरेशन पुनः लोड नहीं किया जाएगा।

0

मुझे वास्तव में दिए गए समस्या का समाधान मिला है।

  AppDomainSetup domaininfo = new AppDomainSetup(); 

      domaininfo.ApplicationBase = System.Environment.CurrentDirectory; 
      domaininfo.ConfigurationFile = "Target_Config.exe.config"; 

      Evidence adevidence = AppDomain.CurrentDomain.Evidence; 

      AppDomain dom = AppDomain.CreateDomain("test", adevidence, domaininfo); 

      var someType =(SomeType)dom.CreateInstanceAndUnwrap("Target_Assembly", 
       "Target_Assembly.SomeType"); 

यहां प्रमुख मुद्दा AppDomainSetup वर्ग, जो विधानसभा पर configurationfile गुण सेट करने की अनुमति देता बनाया जाना जाता है: नीचे यह कैसे किया जा सकता है की कोड के fiew लाइनें हैं। अब, हम परिवर्तनों के लिए कॉन्फ़िगरेशन फ़ाइल "Target_Config.exe.config" की निगरानी कर सकते हैं। जब यह बदला जाता है, तो उपरोक्त बनाए गए एपडोमेन को अनलोड किया जाना चाहिए और फिर फिर से बनाया जाना चाहिए।

+0

शायद यह प्रत्येक एप्लिकेशन के लिए इसे कॉपी किए बिना कई अनुप्रयोगों में कॉन्फ़िगरेशन फ़ाइल का पुन: उपयोग करने का एक समाधान है। – Markus

7

मान लीजिए कि आप निम्नलिखित कॉन्फ़िग फ़ाइल करते हैं:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="test" value="1" /> 
    </appSettings> 
</configuration> 

के अनुभवहीन दृष्टिकोण पहले कोशिश करते हैं। निम्नलिखित आवेदन appSettingtest प्रति सेकंड एक बार नामित का मूल्य हड़पने की कोशिश करेंगे, और इसके मूल्य को मुद्रित:

static void Main(string[] args) 
{ 
    while(true) 
    { 
     Console.WriteLine(ConfigurationManager.AppSettings["test"]); 
     Thread.Sleep(1000); 
    } 
} 

लेकिन अफसोस! यह चल रहा है, आप देखेंगे कि यह 1 प्रिंटिंग रखता है, और कोई भी बदलाव नहीं उठाता है।

आप निम्नलिखित लिए अपना कोड अपडेट करते हैं, यह इस समस्या को हल करेंगे, और जब भी आप इसे बदल यह परिवर्तन लेने देगा:

static void Main(string[] args) 
{ 
    while(true) 
    { 
     ConfigurationManager.RefreshSection("appSettings"); 
     Console.WriteLine(ConfigurationManager.AppSettings["test"]); 
     Thread.Sleep(1000); 
    } 
} 
+0

इस पोस्ट को उत्तर के रूप में चिह्नित नहीं किया गया था। मैं अधिक _verbose_ उत्तरों पसंद करते हैं, लेकिन ठीक है, यह सिर्फ मुझे। –

1
ConfigurationManager.RefreshSection("configuration"); 
    Properties.Settings.Default.Reload(); 
संबंधित मुद्दे