2009-11-05 15 views
15

मैं एपसेटिंग कुंजी को असेंबली कॉन्फ़िगरेशन फ़ाइल से पुनर्प्राप्त करना चाहता हूं जिसे MyAssembly.dll.config कहा जाता है। यहाँ कॉन्फ़िग फ़ाइल का एक नमूना है:मैं असेंबली कॉन्फ़िगरेशन फ़ाइल से AppSettings को कैसे पुनर्प्राप्त करूं?

<configuration> 
    <appSettings> 
     <add key="MyKey" value="MyVal"/> 
    </appSettings> 
</configuration> 

यहाँ इसे पुनः प्राप्त करने कोड है:

var myKey = ConfigurationManager.AppSettings["MyKey"]; 
+0

संभावित डुप्लिकेट [मैं पढ़ सकते हैं कैसे/app.config लिखने क्रम witho पर सेटिंग उपयोगकर्ता सेटिंग्स का उपयोग कर ut?] (https://stackoverflow.com/questions/3638754/how-can-i-read-write-app-config-settings-at-runtime-without-using-user-settings) नहीं – Matt

उत्तर

20

OpenMappedExeConfiguration का उपयोग करके आपको एक "कॉन्फ़िगरेशन" ऑब्जेक्ट देता है जिसे आप क्लास लाइब्रेरी की कॉन्फ़िगरेशन में देखने के लिए उपयोग कर सकते हैं (और वहां मौजूद सेटिंग्स मुख्य ऐप में उसी नाम से ओवरराइड कर देंगे config):

स्ट्रिंग धारावाहिक = ConfigurationManager.AppSettings:

ExeConfigurationFileMap map = new ExeConfigurationFileMap(); 
map.ExeConfigFilename = "ConfigLibrary.config"; 

Configuration libConfig = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); 

AppSettingsSection section = (libConfig.GetSection("appSettings") as AppSettingsSection); 
value = section.Settings["Test"].Value; 

लेकिन उन सेटिंग्स है कि मुख्य एप्लिकेशन की config के लिए अद्वितीय हैं और वर्ग पुस्तकालय के अपने config में मौजूद नहीं है अभी भी ConfigurationManager स्थिर वर्ग के माध्यम से सुलभ हैं ["धारावाहिक"];

कि अभी भी काम करता है - वर्ग पुस्तकालय के config केवल उन सेटिंग्स है कि इसके कॉन्फ़िग फ़ाइल के अंदर हैं छुपाता है; प्लस आप दो दुनियाओं (मुख्य app.config, classlibrary.config) पूरी तरह से और बहुत खुशी से साथ नहीं हो सकते "libConfig उदाहरण उपयोग करने के लिए वर्ग पुस्तकालय के अपने config सेटिंग की पहुंच भी प्राप्त करने की आवश्यकता

-। नहीं एक वहाँ सब पर बात नहीं!

मार्क

+1

क्या होगा यदि मेरे कस्टम कॉन्फ़िगरेशन फ़ाइल में ऐपसेटिंग नोड नहीं है? मेरे पास नोड है। तो AppSettingsSection का उपयोग किये बिना नोड्स कैसे प्राप्त करें? – Shesha

0
var uri = new Uri(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)); 
var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = Path.Combine(uri.LocalPath, "MyAssembly.dll.config") }; 
var assemblyConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 
+0

वास्तव में - आपको OpenMappedExeCOnfiguration कॉल से "कॉन्फ़िगरेशन" ऑब्जेक्ट मिलेगा, और यदि आप इसका उपयोग करते हैं, तो आप अपनी मैप की गई कॉन्फ़िगरेशन फ़ाइल के अंदर देख सकते हैं, लेकिन यदि आप teh 'ConfigurationManager.AppSettings []' का उपयोग करते हैं, तो भी आपको मुख्य ऐप मिल रहा है कॉन्फ़िगरेशन। –

0

आप भी इसे एक XmlDocument के रूप में खोलने के ऊपर और xPath साथ दस्तावेज़ नेविगेट कर सकते हैं। वहां हमेशा LinqToXml

6
var appSettings = ConfigurationManager.OpenExeConfiguration((Assembly.GetAssembly(typeof(MYASSEMBLY))).Location).AppSettings; 

तो आप के रूप में ऊपर कर सकते हैं।

-1
Using System.Configuration 
Public Shared Function AppDomainConfiguration() As Configuration 
    Dim fileMap As New ExeConfigurationFileMap 
    fileMap.ExeConfigFilename = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile 
    Return ConfigurationManager.OpenMappedExeConfiguration(fileMap,Configuration.ConfigurationUserLevel.None) 
End Function 
की
संबंधित मुद्दे