2009-01-12 12 views
8

क्या अनुप्रयोग app.config (current.config को new.config, फ़ाइल के लिए फ़ाइल) को स्विच करने के लिए रनटाइम पर कोई तरीका है। मेरे पास बैकअप/पुनर्स्थापना प्रक्रिया है जिसे अपनी खुद की application.exe.config फ़ाइल को प्रतिस्थापित करने की आवश्यकता है। मैंने यह post देखा है लेकिन यह रनटाइम पर ऐसा करने का उत्तर नहीं देता है।रनटाइम पर app.config स्विच कर रहा है?

उत्तर

10

बाहर निकलता है मैं नए के लिए .config फ़ाइल को स्वैप कर सकता हूं और प्रत्येक अनुभाग के लिए कॉन्फ़िगरेशन मैनेजर। रीफ्रेशसेक्शन (...) कर सकता हूं। यह नई .config फ़ाइल से अद्यतन होगा।

2

क्या आप यह पता लगाते हैं कि आपको फ़ाइलों को स्विच करने की आवश्यकता है जब आप एप्लिकेशन को पुनरारंभ करने में सक्षम हैं? यदि ऐसा है, तो यह केवल फाइलों को स्विच करने और पुनरारंभ करने की बात है। अब, मुश्किल बिट है यदि .NET प्रोग्राम चल रहा है, तो app.config फ़ाइल खोलता रहता है। मुझे संदेह है कि यह नहीं करता है, लेकिन यदि सबसे स्पष्ट रूप से दृष्टिकोण विफल रहता है, तो मेरा सुझाव है कि आपके पास दूसरा एप्लिकेशन (cfgswitcher.exe) है जो कमांड लाइन पर निर्दिष्ट पीआईडी ​​के साथ प्रक्रिया को प्रतीक्षा करता है, फिर कॉन्फ़िगरेशन फ़ाइलों को स्विच करता है और फिर से लॉन्च करता है मूल प्रक्रिया फिर आपके ऐप को cfgswitcher.exe लॉन्च करने की आवश्यकता होगी (एक कमांड लाइन तर्क के रूप में अपने स्वयं के पीआईडी ​​में गुजरना) और समाप्त करना होगा।

जैसा कि मैंने कहा है, यह पहले अधिक स्पष्ट दृष्टिकोण की कोशिश करने लायक है।

संपादित करें: यदि आप एप्लिकेशन को पुनरारंभ नहीं कर सकते हैं (या यहां तक ​​कि इसका एक नया ऐपडोमेन में भी हिस्सा) तो app.config (असेंबली बाइंडिंग इत्यादि) के विभिन्न पहलुओं को बदला नहीं जा सकता है। यदि आप केवल के अपने कॉन्फ़िगरेशन अनुभागों में बदल रहे हैं, तो मेरा सुझाव है कि आप उन्हें एक अलग कॉन्फ़िगरेशन फ़ाइल में संग्रहीत करें और जब चाहें उन्हें पुनः लोड करें।

+0

मैं एप्लिकेशन को पुनरारंभ करने में असमर्थ हूं। – maxfridbe

0

एप्लिकेशनसेटिंगबेस क्लास पर आपके लिए उपलब्ध घटनाओं को देखें। प्रॉपर्टी चेंज & सेटिंग चेंजिंग है जो आपको जो चाहिए वह दे सकती है।

आप फ़ाइल को भी देख सकते हैं और यदि उसने नई सेटिंग्स प्राप्त करने के लिए रीलोड विधि को कॉल किया है।

0

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

वैसे भी, शायद यह सिर्फ मेरे परिदृश्य के बारे में पर्याप्त जानकारी नहीं है, लेकिन इस तरह की मछली पकड़ने लगती है।

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

5

माइक्रोसॉफ्ट .NET के app.config आपके परिदृश्य के साथ-साथ कई अन्य लोगों के लिए डिज़ाइन नहीं किया गया है। मुझे अक्सर एक समान आवश्यकता का सामना करना पड़ता है, इसलिए मैंने समाधान तैयार करने में काफी प्रयास किए हैं।

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

  2. असली कॉन्फ़िगरेशन डेटा के लिए एक वैकल्पिक स्थान चुनें: एक फ़ाइल, डेटाबेस, शायद यहां तक ​​कि एक वेब सेवा भी। मैं ज्यादातर समय डेटाबेस पसंद करता हूं, इसलिए मैं एक साधारण संरचना के साथ एक कॉन्फ़िगरेशन टेबल बना देता हूं जो मुझे अपना डेटा स्टोर करने की अनुमति देता है।

  3. अपनी कॉन्फ़िगरेशन पहुंच को लपेटने के लिए एक साधारण लाइब्रेरी लागू करें ताकि आपके पास अपने शेष एप्लिकेशन (निर्भरता इंजेक्शन के माध्यम से) के लिए एक साधारण API हो। app.config के साथ-साथ आपके वास्तविक कॉन्फ़िगरेशन संग्रहण स्थान का उपयोग छुपाएं। चूंकि .NET दृढ़ता से टाइप किया गया है, इसलिए कॉन्फ़िगरेशन सेटिंग्स को बनाएं - प्रत्येक स्ट्रिंग को सबसे विशिष्ट प्रकार में उपलब्ध कराएं (URL, Int32, FileInfo, आदि)।

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

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

आनंद लें, और शुभकामनाएँ।

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