यह कैश की गई हो जाता है, एक संपत्ति के पहले उपयोग पर, तो यह भौतिक फ़ाइल से हर बार जब आप एक मूल्य के लिए पूछना नहीं पढ़ता। यही कारण है कि नवीनतम मान प्राप्त करने के लिए Windows एप (या Refresh कॉन्फ़िगरेशन) को पुनरारंभ करना आवश्यक है, और जब आप web.config संपादित करते हैं तो ASP.Net ऐप स्वचालित रूप से पुनरारंभ क्यों होता है। How to prevent an ASP.NET application restarting when the web.config is modified उत्तर में संदर्भों में पुनरारंभ करने के लिए ASP.Net को हार्ड वायर्ड क्यों किया जाता है।
हम इस का उपयोग करते हुए ILSpy और System.Configuration के आंतरिक भागों को देखकर सत्यापित कर सकते हैं:
public static NameValueCollection AppSettings
{
get
{
object section = ConfigurationManager.GetSection("appSettings");
if (section == null || !(section is NameValueCollection))
{
throw new ConfigurationErrorsException(SR.GetString("Config_appsettings_declaration_invalid"));
}
return (NameValueCollection)section;
}
}
सबसे पहले, यह वास्तव में दिखता है जैसे कि यह अनुभाग हर बार मिल जाएगा। GetSection को देखते हुए:
public static object GetSection(string sectionName)
{
if (string.IsNullOrEmpty(sectionName))
{
return null;
}
ConfigurationManager.PrepareConfigSystem();
return ConfigurationManager.s_configSystem.GetSection(sectionName);
}
यहां महत्वपूर्ण लाइन PrepareConfigSystem()
विधि है; यह कॉन्फ़िगरेशन मैनेजर द्वारा आयोजित IInternalConfigSystem
फ़ील्ड का एक उदाहरण शुरू करता है - कंक्रीट प्रकार ClientConfigurationSystem
इस लोड के हिस्से के रूप में, Configuration कक्षा का एक उदाहरण तत्काल है। यह वर्ग प्रभावी रूप से कॉन्फ़िगरेशन फ़ाइल का एक ऑब्जेक्ट प्रस्तुति है, और यह क्लाइंट कॉन्फ़िगरेशन सिस्टम द्वारा क्लाइंट कॉन्फ़िगरेशनहोस्ट संपत्ति द्वारा स्थिर क्षेत्र में आयोजित किया जाता है - इसलिए यह कैश किया गया है।
आप ऐसा करके अनुभव इस परीक्षण कर सकते हैं निम्नलिखित (एक Windows प्रपत्र या WPF अनुप्रयोग में):
- अपना एप्लिकेशन
- पहुँच app.config
- में एक मूल्य के शुरू करने के लिए एक बदलाव लाएं app.config
- चेक देखने के लिए नया मान वर्तमान
- कॉल है कि क्या
ConfigurationManager.RefreshSection("appSettings")
- चेक यदि नया मान को देखने के लिए उपस्थित है।
वास्तव में, मैं अपने आप को कुछ समय बचाया जा सकता था अगर मैं सिर्फ RefreshSection पद्धति पर टिप्पणी पढ़ा था :-)
/// <summary>Refreshes the named section so the next time that it is retrieved it will be re-read from disk.</summary>
/// <param name="sectionName">The configuration section name or the configuration path and section name of the section to refresh.</param>
आपका मतलब "हमेशा नहीं" से क्या मतलब है! यह डिज़ाइन द्वारा मैंने समझा है कि आईआईएस ऐप को पुनरारंभ करता है और कॉन्फ़िगर को फिर से लोड करता है। –