2009-07-28 13 views
7

मैं उन अनुप्रयोगों को लिख रहा हूं जो किसी तृतीय-पक्ष एप्लिकेशन के साथ इंटरऑपरेट करते हैं। यह एप्लिकेशन एक डीएलएल में विधियों के माध्यम से डेवलपर्स को एक एपीआई का खुलासा करता है। कुछ समय पहले, इस ऐप के विक्रेता ने अपने प्रोग्राम में अपने .NET घटकों को एकीकृत करना शुरू किया, और जब उन्होंने किया, तो उन्होंने फैसला किया कि उनके घटकों को रनटाइम पर सेटिंग्स प्राप्त करने के लिए ConfigurationManager का उपयोग करना चाहिए।मैं एकाधिक फ़ाइलों से एप्लिकेशन सेटिंग्स लोड करने के लिए ConfigManager कैसे प्राप्त कर सकता हूं?

इसका क्या अर्थ है: उनके कार्यक्रम, foo.exe, fooengine.dll पर कॉल करता है, और यह foo.exe.config से इसकी सेटिंग्स को पढ़ता है। मेरा प्रोग्राम, bar.exe, fooengine.dll पर भी कॉल करता है, और यह bar.exe.config से इसकी सेटिंग्स को पढ़ता है।

अच्छा, यह सिर्फ सादा गलत है। लेकिन मैं इसे कैसे ठीक करूं?

सरल कामकाज 10 में foo.exe.config की सेटिंग्स को दोहराना है। यह काम करेगा, लेकिन यह बेवकूफ है। इसका मतलब है कि एक प्रशासनिक दृष्टिकोण से, एन अलग-अलग फाइलों में एक दी गई सेटिंग को बनाए रखा जाना चाहिए। यह जल्द या बाद में असफल होने जा रहा है।

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

मैं अपनी सेटिंग्स फ़ाइल को XmlDocument में शारीरिक रूप से पढ़ सकता हूं और फिर उन्हें स्वयं सेट कर सकता हूं। लेकिन अब मैं कड़ाई से अपने कार्यान्वयन के लिए अपने कोड जोड़ रहा हूँ; अगर वे एक नई रिलीज डालते हैं जो सेटिंग्स को applicationSettings सेक्शन में ले जाता है (जहां वह होना चाहिए तो यह 200 9 हो), मेरा कोड टूट जाएगा।

क्या इसमें से कोई और तरीका है?

उत्तर

2

ठीक है, मुझे लगता है कि कम से कम इस समस्या के मेरे विशिष्ट संस्करण के लिए मुझे जवाब मिल गया है।

.NET 2.0 ConfigurationManagerappSettings तत्व पर file विशेषता का समर्थन करता है। यह आपको बाहरी तत्व से उस तत्व की सामग्री प्राप्त करने देता है। तो मैं क्या कर रहा है:

  1. कट foo.exe.config से बाहर appSettings तत्व और, उस निर्देशिका कहा जाता है में एक और फ़ाइल में पेस्ट मान लें, appSettings.xml

  2. foo.exe.config: <appSettings file="appSettings.xml"/> पर एक नया तत्व जोड़ें।

  3. bar.exe.config को एक तत्व जोड़ें: <appSettings file="c:\program files\foo\appSettings.xml"/>

यह काम करता है। लेकिन यह केवल काम करता है क्योंकि मेरा प्रोग्राम appSettings का उपयोग नहीं करता है।

2

आप केवल load their configuration file कर सकते हैं।

+0

मुझे विश्वास नहीं है कि "बस" सही शब्द है।कॉन्फ़िगरेशन ऑब्जेक्ट प्राप्त करने के लिए मैं OpenMappedMachine कॉन्फ़िगरेशन को कॉल कर सकता हूं। लेकिन यह ConfigManager को अद्यतन नहीं करता है। और यहां तक ​​कि नाम/मूल्य जोड़े की सूची तक पहुंचने के लिए तुच्छ नहीं है (याद रखें, दूसरा ऐप पुरानी शैली "ऐप सेटिंग्स" अनुभाग का उपयोग कर रहा है, वर्तमान "एप्लिकेशन सेटिंग्स" अनुभाग नहीं - GetSection डिफ़ॉल्ट रूप से ऑब्जेक्ट के रूप में देता है) । फ़ाइल को XmlDocument में पढ़ने के लिए यह बहुत कम कोड है। –

संबंधित मुद्दे

 संबंधित मुद्दे