2010-02-09 5 views
6

से सेटिंग्स पढ़ना मेरा एएसपीनेट ऐप सामान्य कॉन्फ़िगरेशन के लिए web.config का उपयोग कर रहा है। मेरे पास एक ऐसा अनुभाग भी है जो कनेक्शन स्ट्रिंग के लिए कुछ डेटा ऑब्जेक्ट्स को मैप करता है, और वह अनुभाग दो हजार लाइनों के लिए जा रहा है। मैं उस अनुभाग को दूसरी कॉन्फ़िगरेशन फ़ाइल "dataMappings.config" में ले जाना चाहता हूं, इसलिए मैं web.config को बड़ा नहीं करता - क्या उस कॉन्फ़िगरेशन फ़ाइल तक पहुंचने का मानक तंत्र है?अलग कॉन्फ़िगरेशन फ़ाइल

धन्यवाद, एंड्री

उत्तर

10

प्रत्येक अनुभाग में, आप configSource है, जो एक बाहरी फ़ाइल पथ को इंगित कर सकते हैं परिभाषित कर सकते हैं।

<connectionStrings configSource="myConnectionStrings.Config" /> 
<appSettings configSource="myAppSettings.Config" /> 

बस .xml फाइल एक्सटेंशन का उपयोग नहीं करने के बाद से यह एक ब्राउज़र में देखी जा सकती है सुनिश्चित करें: यहाँ एक सरल उदाहरण है। .config वेब सर्वर द्वारा नहीं परोसा जाएगा।

क्योंकि आपके config वर्गों अभी भी web.config (इस प्रकार बाह्य फ़ाइलों की ओर इशारा करते) में परिभाषित कर रहे हैं, तो आप सामान्य मार्गों के माध्यम से इस जानकारी का उपयोग कर सकते हैं (WebConfigurationManager.AppSettings, WebConfigurationManager.GetSection, ConfigurationManager, या कस्टम अनुभाग हैंडलर के रूप में आवश्यक)

+0

यदि मैं एक कस्टम सेक्शन का उपयोग कर रहा हूं तो यह काम करेगा? या क्या मुझे configSource विशेषता का समर्थन करने के लिए उस कस्टम सेक्शन कोड में कुछ करने की ज़रूरत है? – Andrey

+0

+1 - अच्छा जवाब, मुझे इसे हराया! –

+0

@Andrey: यह .NET 2.0 और ऊपर ढांचे में ** ** ** कॉन्फ़िगरेशनसेक्शन 'के साथ काम करेगा। –

1

मैंने एक साझा DLL में कॉन्फ़िगरेशन सहायक का उपयोग किया, और DLL में एक app.config फ़ाइल जो प्रोजेक्ट को संपादित करके और सेटिंग टैब सेट करके सेटिंग्स.प्रॉपर्टीज। डिफॉल्ट सामग्री का उपयोग करती है। ऐसा प्रतीत होता है कि जब तक आप पुन: संकलित नहीं करते हैं तब तक मान पढ़ा नहीं जाता है, और प्रोजेक्ट सेटिंग्स के साथ app.config (dll में) resync।

यह मेरे लिए काम करता है। मुझे याद नहीं है कि मुझे प्रेरणा मिली है। मैं इस वर्ग को किसी साझा परियोजना में कहीं भी शामिल करता हूं। किसी भी डीएलएल को अपनी सेटिंग्स को कॉल करने की अनुमति देता है, जो आपको dllFile.dll.config प्रविष्टियों को बदलने की अनुमति देता है। मैं कनेक्शन तारों के लिए इसका उपयोग करता हूं। चेतावनी यह है कि इस विधि में, कनेक्शन स्ट्रिंग को एक प्रकार स्ट्रिंग होना चाहिए, न कि विशेष कनेक्शन स्ट्रिंग।

using System; 
using System.Configuration; 

namespace Shared 
{ 
    public static class ConfigurationHelper 
    { 
     public static string GetConfigValue(string keyName) 
     { 
      string codebase = System.Reflection.Assembly.GetCallingAssembly().CodeBase; 
      Uri p = new Uri(codebase); 
      string localPath = p.LocalPath.ToLowerInvariant(); 
      string executingFilename = System.IO.Path.GetFileNameWithoutExtension(localPath); 
      string sectionGroupName = "applicationSettings"; 
      string sectionName = executingFilename + ".Properties.Settings"; 
      string configName = localPath + ".config"; 
      ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); 
      fileMap.ExeConfigFilename = configName; 
      Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 
      ConfigurationSectionGroup group = config.GetSectionGroup(sectionGroupName); 
      ClientSettingsSection section = null; 
      foreach (ClientSettingsSection sect in group.Sections) 
      { 
       if (sect.SectionInformation.Name.Equals(sectionName, StringComparison.InvariantCultureIgnoreCase)) 
       { 
        section = sect; 
        break; 
       } 
      } 
      SettingElement elem = section.Settings.Get(keyName); 
      if (elem == null) 
       return ""; 
      else 
       return elem.Value.ValueXml.InnerText.Trim(); 
     } 
    } 
} 

//in DLL 
void foo() 
{ 
    var str = ConfigurationHelper.GetSetting("ConnectionStringProd"); 
}