दिलचस्प पोस्ट
ggplot2 प्रतिलिपि एकाधिक गुण / किंवदंतियों प्रति सौंदर्य, पुनरीक्षित MySQL अधिकतम स्मृति उपयोग एक सॉकेट तक पहुंचने के लिए एक प्रयास किया गया था, जिसने इसकी पहुंच अनुमतियों से मना किया सी ++ विरासत और फ़ंक्शन ओवरराइडिंग कस्टम चेकबॉक्स छवि एंड्रॉइड AngularJS: एक सेवा गुणों को बाध्य करने का सही तरीका जिपर कॉमोनैड्स, सामान्यतः GitHub स्रोत गतिशील नेविगेशन मैं डेल्फी 2007 एप्लिकेशन के अंदर क्रिस्टल इलेवन रिपोर्ट कैसे दिखा सकता हूं? मैं CodeIgniters URL रूटिंग काम करने के लिए एक .htaccess फ़ाइल कैसे लिख सकता हूँ? सी, सी 99, एएनएसआई सी और जीएनयू सी के बीच अंतर क्या है? पाइप ऑपरेटर का उपयोग करते समय सशर्त मूल्यांकन>%> Google Firebase साइन आउट और उपयोगकर्ता को एंड्रॉइड ऐप में भूलें आर प्रक्रियाओं के लिए उपलब्ध स्मृति में वृद्धि (या घटती हुई) "गेटएड्रिन्फिन असफल", इसका क्या अर्थ है?

लाइब्रेरी (डीएलएल) के लिए 'app.config' के समतुल्य

वहाँ पुस्तकालयों (DLLs) के लिए app.config बराबर है? यदि नहीं, तो पुस्तकालय के लिए विशिष्ट विन्यास सेटिंग्स को स्टोर करने का सबसे आसान तरीका क्या है? कृपया ध्यान दें कि पुस्तकालय का उपयोग विभिन्न अनुप्रयोगों में किया जा सकता है।

Solutions Collecting From Web of "लाइब्रेरी (डीएलएल) के लिए 'app.config' के समतुल्य"

आप अलग विन्यास फाइल कर सकते हैं, लेकिन आपको इसे "मैन्युअल रूप से" पढ़ना होगा, ConfigurationManager.AppSettings["key"]ConfigurationManager.AppSettings["key"] चल रहे असेंबली के केवल कॉन्फ़िग को पढ़ेंगे।

यह मानते हुए कि आप अपने आईडीई के रूप में विजुअल स्टूडियो का उपयोग कर रहे हैं, आप वांछित परियोजना → जोड़ें → नया आइटम → अनुप्रयोग कॉन्फ़िगरेशन फ़ाइल पर राइट क्लिक कर सकते हैं

इससे App.config को परियोजना फ़ोल्डर में जोड़ दिया जाएगा, वहां अपनी सेटिंग्स को <appSettings> अनुभाग के नीचे रखें

अब इस फाइल से पढ़ने के लिए ऐसे कार्य हैं:

 string GetAppSetting(Configuration config, string key) { KeyValueConfigurationElement element = config.AppSettings.Settings[key]; if (element != null) { string value = element.Value; if (!string.IsNullOrEmpty(value)) return value; } return string.Empty; } 

और इसका इस्तेमाल करने के लिए:

 Configuration config = null; string exeConfigPath = this.GetType().Assembly.Location; try { config = ConfigurationManager.OpenExeConfiguration(exeConfigPath); } catch (Exception ex) { //handle errror here.. means DLL has no sattelite configuration file. } if (config != null) { string myValue = GetAppSetting(config, "myKey"); ... } 

आपको कॉन्फ़िगरेशन मैनेजर वर्ग उपलब्ध होने के लिए सिस्टम। कॉन्फ़िगरेशन नेमस्पेस के संदर्भ में भी जोड़ना होगा।

प्रोजेक्ट का निर्माण करते समय, DLL के अतिरिक्त, आपको DllName.dll.config फ़ाइल भी DllName.dll.config , वह फ़ाइल है जिसे आप खुद DLL के साथ प्रकाशित करना चाहते हैं।

उपरोक्त मूल नमूना कोड है, जो कि एक पूर्ण पैमाने पर उदाहरण में रुचि रखते हैं, कृपया इस अन्य उत्तर को देखें।

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

समाधान है: आपको क्लास लायब्रेरी के प्रोजेक्ट में App.config फ़ाइल को डालने की आवश्यकता नहीं है।
आपने App.config फ़ाइल को उस ऐप्लिकेशन में डाल दिया है जो आपकी क्लास लाइब्रेरी के dll को संदर्भित करता है।

उदाहरण के लिए, मान लीजिए कि हमारे पास MyClasses.dll नामक क्लास लाइब्रेरी है, जो इस तरह ऐप .config फ़ाइल का उपयोग करती है:

 string connect = ConfigurationSettings.AppSettings["MyClasses.ConnectionString"]; 

अब, मान लें कि हमारे पास MyApp.exe नामक एक विंडोज़ अनुप्रयोग है जो MyClasses.dll को दर्शाता है। इसमें ऐप के साथ एक App.config होता है जैसे कि:

 <appSettings> <add key="MyClasses.ConnectionString" value="Connection string body goes here" /> </appSettings> 

या

एक एक्सएमएल फ़ाइल app.config के लिए सबसे अच्छा बराबर है एक्सएमएल धारावाहिक / deserialize का प्रयोग करें जैसा कि आवश्यक है आप इसे आपसे कह सकते हैं कि आप क्या चाहते हैं यदि आपकी कॉन्फ़िग "स्थिर" है और इसे बदलने की आवश्यकता नहीं है, तो आप इसे प्रोजेक्ट को एक एम्बेडेड संसाधन के रूप में जोड़ सकते हैं।

आशा है कि यह कुछ आइडिया देता है

कॉन्फ़िगरेशन फ़ाइलें एप्लिकेशन-स्कॉन्डे हैं और विधानसभा-स्कॉच नहीं हैं। इसलिए आपको अपनी लाइब्रेरी के कॉन्फ़िगरेशन अनुभागों को हर एप्लिकेशन की कॉन्फ़िगरेशन फ़ाइल में रखना होगा जो आपकी लाइब्रेरी का उपयोग कर रहा है।

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

उस ने कहा, XML विन्यास फाइल अत्यंत आसान है, इसलिए मैंने पाया कि सबसे अच्छा समझौता कस्टम कॉन्फ़िगरेशन अनुभागों का उपयोग कर रहा है आप एक XML फ़ाइल में अपने पुस्तकालय का कॉन्फ़िगरेशन डालते हैं जो कि फ्रेमवर्क द्वारा स्वचालित रूप से पढ़ा और पार्स किया जाता है और आप संभावित दुर्घटनाओं से बचें।

आप MSDN पर कस्टम कॉन्फ़िगरेशन अनुभागों के बारे में अधिक जानकारी प्राप्त कर सकते हैं और फिल हैक का उनके बारे में एक अच्छा लेख है।

 public class ConfigMan { #region Memberes string _assemblyLocation; Configuration _configuration; #endregion #region Constructors /// <summary> /// Loads config file settings for libraries that use assembly.dll.config files /// </summary> /// <param name="assemblyLocation">The full path or UNC location of the loaded file that contains the manifest.</param> public ConfigMan(string assemblyLocation) { _assemblyLocation = assemblyLocation; } #endregion #region Properties Configuration Configuration { get { if (_configuration == null) { try { _configuration = ConfigurationManager.OpenExeConfiguration(_assemblyLocation); } catch (Exception exception) { } } return _configuration; } } #endregion #region Methods public string GetAppSetting(string key) { string result = string.Empty; if (Configuration != null) { KeyValueConfigurationElement keyValueConfigurationElement = Configuration.AppSettings.Settings[key]; if (keyValueConfigurationElement != null) { string value = keyValueConfigurationElement.Value; if (!string.IsNullOrEmpty(value)) result = value; } } return result; } #endregion } 

बस कुछ करने के लिए मैं एक कक्षा में शीर्ष उत्तर refactored उपयोग कुछ ऐसा है

 ConfigMan configMan = new ConfigMan(this.GetType().Assembly.Location); var setting = configMan.GetAppSetting("AppSettingsKey"); 

यदि आप विजुअल स्टूडियो (प्रोजेक्ट प्रॉपर्टी, सेटिंग्स) में क्लास लाइब्रेरी प्रोजेक्ट में सेटिंग जोड़ते हैं, तो यह आपके। पर एक प्रॉजेक्ट को संबंधित यूजर सेटिंग्स / एपीटीओएनसेट्स सेक्शन में जोड़ देगा, और इन सेटिंग्स के लिए आपकी सेटिंग्स से डिफ़ॉल्ट मान फ़ाइल।

हालांकि रनटाइम पर इस विन्यास फ़ाइल का उपयोग नहीं किया जाएगा – बजाय क्लास पुस्तकालय इसके होस्टिंग अनुप्रयोग की कॉन्फ़िगरेशन फ़ाइल का उपयोग करता है।

मुझे विश्वास है कि इस फ़ाइल को बनाने का मुख्य कारण यह है कि आप सेटिंग को मेजबान एप्लिकेशन की कॉन्फ़िगरेशन फ़ाइल में कॉपी / पेस्ट कर सकते हैं।

मूल प्रश्न के जवाब में, मैं आम तौर पर एक लिंक के रूप में अपनी परीक्षण परियोजना में कॉन्फ़िग फ़ाइल जोड़ता हूं; तब आप परीक्षण चलाने के आउट फ़ोल्डर में जोड़ने के लिए DeploymentItem विशेषता का उपयोग कर सकते हैं।

 [TestClass] [DeploymentItem("MyProject.Cache.dll.config")] public class CacheTest { . . . . } 

टिप्पणियों के जवाब में कि असेंबली परियोजना विशिष्ट नहीं हो सकती, वे कर सकते हैं और यह बहुत लचीलेपन विशेषताओं को प्रदान करता है आईओसी फ्रेमवर्क के साथ काम करते समय

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

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

मैं आपको क्या सिफारिश करता हूं, उदाहरण के लिए उन मूल्यों के लिए आपकी विधानसभा में कक्षाओं पर गुणों को परिभाषित करता है

 private string ExternalServicesUrl { get { string externalServiceUrl = ConfigurationManager.AppSettings["ExternalServicesUrl"]; if (String.IsNullOrEmpty(externalServiceUrl)) throw new MissingConfigFileAppSettings("The Config file is missing the appSettings entry for: ExternalServicesUrl"); return externalServiceUrl; } } 

यहां, एक्सपोर्ट सर्विसेज फाइल से एक्सटर्नल सर्विसेज यूआरएल का मूल्य मिलता है। यदि इस विधानसभा का उपयोग करते हुए कोई भी एप्लिकेशन गुम है, तो कॉन्फ़िग फ़ाइल में सेटिंग आपको अपवाद मिलेगी, यह स्पष्ट है कि कुछ गायब हो गया है।

मिसिंग कॉन्फ़िफ़फ़ाइल ऐप सेटिंग कस्टम अपवाद है I आप एक अलग अपवाद फेंकना चाह सकते हैं

बेशक, एक बेहतर डिज़ाइन उन क्लासों की पद्धति के लिए होगा, जो उन मानों को पैरामीटर के रूप में प्रदान करने के लिए कॉन्फ़िग फाइल सेटिंग पर निर्भर करने के बजाय। इस तरह इन कक्षाओं का उपयोग करने वाले एप्लिकेशन यह तय कर सकते हैं कि वे इन मूल्यों को और कहां प्रदान करते हैं।

मौजूदा आइटम को जोड़ें का उपयोग करें, डीएलएल परियोजना से ऐप कॉन्फ़िग चुनें जोड़ने पर क्लिक करने से पहले, "लिंक के रूप में जोड़ें" बटन के दाहिने हाथ की तरफ नीचे तीर का उपयोग करें

मैं अपने देव में हर समय ऐसा करता हूं।

मैं वर्तमान में खुदरा सॉफ़्टवेयर ब्रांड के लिए प्लगइन्स बना रहा हूं, जो वास्तव में नेट क्लास पुस्तकालय हैं I आवश्यकता के अनुसार, प्रत्येक प्लगइन को कॉन्फ़िग फ़ाइल का उपयोग करके कॉन्फ़िगर करना होगा। कुछ शोध और परीक्षण के बाद, मैंने निम्नलिखित कक्षा संकलित की यह काम flawlessly है ध्यान दें कि मैंने अपने मामले में स्थानीय अपवाद निपटान लागू नहीं किया है, क्योंकि मैं एक उच्च स्तर पर अपवाद पकड़ता हूं।

दशमांश और युगल के मामले में, कुछ दशमलव को सही ढंग से दशमलव अंक प्राप्त करने की आवश्यकता होती है, लेकिन यह मेरी संस्कृतिइन्फो के लिए ठीक काम करती है …

 static class Settings { static UriBuilder uri = new UriBuilder(Assembly.GetExecutingAssembly().CodeBase); static Configuration myDllConfig = ConfigurationManager.OpenExeConfiguration(uri.Path); static AppSettingsSection AppSettings = (AppSettingsSection)myDllConfig.GetSection("appSettings"); static NumberFormatInfo nfi = new NumberFormatInfo() { NumberGroupSeparator = "", CurrencyDecimalSeparator = "." }; public static T Setting<T>(string name) { return (T)Convert.ChangeType(AppSettings.Settings[name].Value, typeof(T), nfi); } } 

App.Config फ़ाइल नमूना

 <add key="Enabled" value="true" /> <add key="ExportPath" value="c:\" /> <add key="Seconds" value="25" /> <add key="Ratio" value="0.14" /> 

उपयोग:

  somebooleanvar = Settings.Setting<bool>("Enabled"); somestringlvar = Settings.Setting<string>("ExportPath"); someintvar = Settings.Setting<int>("Seconds"); somedoublevar = Settings.Setting<double>("Ratio"); 

छाया विज़ार्ड और मैट सी के लिए श्रेय

प्रस्तावना : मैं नेट 2.0 का उपयोग कर रहा हूं;

यियानिस लेसिस द्वारा पोस्ट किया गया समाधान स्वीकार्य है लेकिन मुझे इसके साथ कुछ समस्या थी।

सबसे पहले, static AppSettingsSection AppSettings = (AppSettingsSection)myDllConfig.GetSection("appSettings"); रिटर्न नल मुझे उसे static AppSettingSection = myDllConfig.AppSettings; बदलना पड़ा static AppSettingSection = myDllConfig.AppSettings;

फिर return (T)Convert.ChangeType(AppSettings.Settings[name].Value, typeof(T), nfi); अपवादों के लिए कोई पकड़ नहीं है इसलिए मैंने इसे बदल दिया है

 try { return (T)Convert.ChangeType(AppSettings.Settings[name].Value, typeof(T), nfi); } catch (Exception ex) { return default(T); } 

यह बहुत अच्छी तरह से काम करता है, लेकिन यदि आपके पास एक अलग डीएलएल है तो आपको प्रत्येक विधानसभा के कोड को हर बार लिखना होगा। इसलिए, यह हर बार आपकी आवश्यकता के लिए क्लास के लिए मेरा संस्करण है।

 public class Settings { private AppSettingsSection _appSettings; private NumberFormatInfo _nfi; public Settings(Assembly currentAssembly) { UriBuilder uri = new UriBuilder(currentAssembly.CodeBase); string configPath = Uri.UnescapeDataString(uri.Path); Configuration myDllConfig = ConfigurationManager.OpenExeConfiguration(configPath); _appSettings = myDllConfig.AppSettings; _nfi = new NumberFormatInfo() { NumberGroupSeparator = "", CurrencyDecimalSeparator = "." }; } public T Setting<T>(string name) { try { return (T)Convert.ChangeType(_appSettings.Settings[name].Value, typeof(T), _nfi); } catch (Exception ex) { return default(T); } } } 

एक कॉन्फ़िग के लिए:

 <add key="Enabled" value="true" /> <add key="ExportPath" value="c:\" /> <add key="Seconds" value="25" /> <add key="Ratio" value="0.14" /> 

इसे इस रूप में प्रयोग करें:

 Settings _setting = new Settings(Assembly.GetExecutingAssembly()); somebooleanvar = _settings.Setting<bool>("Enabled"); somestringlvar = _settings.Setting<string>("ExportPath"); someintvar = _settings.Setting<int>("Seconds"); somedoublevar = _settings.Setting<double>("Ratio"); 

जहाँ तक मुझे पता है, आपको कॉपी करना होगा + पुस्तकालय से इच्छित अनुभागों को पेस्ट करें। कॉन्फ़िग को एप्लिकेशन .config फ़ाइल में। आप केवल 1 app.config प्रति निष्पादन योग्य उदाहरण प्राप्त करें

मुझे एक ही समस्या का सामना करना पड़ा और इस परियोजना के लिए एक अनुप्रयोग कॉन्फ़िगरेशन फ़ाइल जोड़ने के बाद एक स्थैतिक वर्ग पैरामीटर बनाकर इसका समाधान किया गया:

 public static class Parameters { // For a Web Application public static string PathConfig { get; private set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "web.config"); // For a Class Library public static string PathConfig { get; private set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin", "LibraryName.dll.config"); public static string getParameter(string paramName) { string paramValue = string.Empty; using (Stream stream = File.OpenRead(PathConfig)) { XDocument xdoc = XDocument.Load(stream); XElement element = xdoc.Element("configuration").Element("appSettings").Elements().First(a => a.Attribute("key").Value == paramName); paramValue = element.Attribute("value").Value; } return paramValue; } } 

फिर इस तरह एक पैरामीटर प्राप्त करें:

 Parameters.getParameter("keyName");