2009-05-26 14 views
67

मैं वास्तव में .NET संबंधित सामग्री के सीखने के चरण में हूं और मैं यह खोज रहा था कि एप्लिकेशन को कैसे सहेजना है। मैंने अपनी खुद की कक्षा लिखना समाप्त कर दिया जो एक एक्सएमएल फ़ाइल में सेटिंग्स को सहेजता है और फिर मैंने पाया कि .NET स्वयं ही एप्लिकेशन सेटिंग्स को सहेजने का समर्थन करता है।app.config फ़ाइल और XYZ.settings फ़ाइल के बीच क्या अंतर है?

लेकिन मुझे ऐसा करने के 2 तरीके मिले। जब मैं विजुअल स्टूडियो 2008 में नया आइटम डायलॉग खोलता हूं, तो यह सेटिंग फ़ाइल (.settings) या कॉन्फ़िगरेशन फ़ाइल (.config) बनाने का विकल्प देता है। दोनों के बीच क्या अंतर है और किस परिदृश्य में उनका उपयोग किया जाना चाहिए?

उत्तर

51

सेटिंग्स (दोनों .settings सेट और Configuration.AppSettings से), .config फ़ाइल में संग्रहीत हैं [अन्य सामान के साथ]।

अंतर यह है कि .settings सामान [जिसमें जोड़ दिया गया .NET 2.0/VS2005] परतों सेटिंग्स है कि एक साथ हैं Configuration.AppSettings केवल आपके तार पुनः प्राप्त करने के लिए मजबूर कर देता है जबकि आप का एक सेट के शीर्ष पर एक जोरदार टाइप किया वर्ग कोई रूपांतरण, और डिफ़ॉल्ट की धारणा नहीं है। (कॉन्फ़िगरेशन क्लास को वास्तव में इसे प्रतिबिंबित करने के लिए एक साइड असेंबली में छोड़ा गया है - आपको सिस्टम में संदर्भ जोड़ने की आवश्यकता है। कॉन्फ़िगरेशन स्पष्ट रूप से अगर आप इसे चाहते हैं)।

आपकी प्रोजेक्ट में एक .settings जोड़ना परिणामस्वरूप घर पर एक app.config जोड़ा जा रहा है यदि आपके पास पहले से कोई नहीं है। प्रत्येक घटक जब आप अपने घटक/एप्लिकेशन के लिए सेटिंग्स की सूची बदलते हैं, तो सेटिंग्स को पढ़ने वाली कक्षा स्वचालित रूप से जेनरेट की जाती है।

की अन्य विशेषताएं। सेटिंग्स कुछ सेटिंग्स को उपयोगकर्ता-विशिष्ट के रूप में निर्दिष्ट करने की क्षमता है (और उपयोगकर्ता-विशिष्ट सेटिंग्स को एक कॉल के साथ सहेजने के लिए)।

सभी का उपयोग करने का सबसे अच्छा कारण। सेटिंग्स आमतौर पर यह स्पष्ट करने की क्षमता प्राप्त करती हैं कि गुणों के उपयोग के बाद कोड आधार में कौन सी सेटिंग का उपयोग कर रहा है (और प्रत्येक सेट XML फ़ाइल में एक अलग ब्लॉक है) । Configuration.appSettings इसकी प्रकृति में अधिक वैश्विक है - यह केवल गुणों का एक बैग है और आप नहीं जानते कि कौन सी डीएलएल, उपप्रणाली या कक्षा किसी विशेष सेटिंग प्रविष्टि पर निर्भर करती है। बहुत अधिक के लिए this blog post from Steven Smith देखें।

अंत में, यदि आपने अभी भी सेटिंग प्रबंधन के बारे में पर्याप्त नहीं पढ़ा है, तो आप this Rick Strahl post on the subject को पूर्णता या विचारों और कोणों की पूर्ण मात्रा के लिए हरा नहीं देंगे।

ASIDE: ASP.NET vNext Configuration सामान भी है, outlined in this article जो काफी लचीला है और कॉन्फ़िगरेशन सेटिंग प्रबंधन पर एक अलग कोण प्रदान करता है।

+0

उत्तर के लिए धन्यवाद। बस एक बिंदु के बारे में उलझन में: 2 प्रकार की सेटिंग्स हैं।एक ऐप सेटिंग है और दूसरा उपयोगकर्ता सेटिंग है। यदि कॉन्फ़िगरेशन फ़ाइल में दोनों प्रकार की सेटिंग्स संग्रहीत की जाती हैं, तो अलग-अलग उपयोगकर्ताओं के लिए उपयोगकर्ता सेटिंग्स अलग-अलग कैसे होंगी? – Hemant

+2

इसका उल्लेख छोड़ने के लिए खेद है। उपयोगकर्ता सेटिंग्स डिफ़ॉल्ट कारण मौजूद है (यदि उपयोगकर्ता ने अभी तक ऐप का उपयोग नहीं किया है, तो डिफ़ॉल्ट परिवर्तन तब तक लागू होता है जब तक कोई परिवर्तन सहेजा नहीं जाता है)। उपयोगकर्ता सेटिंग्स उपयोगकर्ता की प्रोफ़ाइल (उपयोगकर्ता \ XXX) निर्देशिका में एक अलग कॉन्फ़िगरेशन फ़ाइल में संग्रहीत हैं। उपयोगकर्ता सेटिंग्स को भी अपडेट किया जा सकता है (सिस्टम वाले डिफ़ॉल्ट एपीआई का उपयोग नहीं कर सकते हैं और नहीं करना चाहिए - वे प्रोग्राम फाइलों में रहते हैं और वहां कई उपयोगकर्ता पहुंच को सुरक्षित रूप से नियंत्रित करना संभव नहीं है।) –

+0

कॉन्फ़िगरेशन मैनेजर यह सब कहाँ फिट करता है? मैं कोशिश कर रहा हूं कि मुझे यह कहने में असफल रहा कि मेरी सेटिंग्स कहां हैं। सेटिंग्स क्या रहती हैं और फिर वहां एक खाली कॉन्फ़िगर सहेजें –

3

एक सेटिंग्स फ़ाइल एक संसाधन फ़ाइल है जिसमें आप विभिन्न सेटिंग्स और उनके डिफ़ॉल्ट मान निर्दिष्ट करते हैं।

मान स्वयं कॉन्फ़िगरेशन फ़ाइल (.config फ़ाइल) में कॉन्फ़िगर किए गए हैं।

एक सेटिंग्स फ़ाइल कभी तैनात नहीं की जाती है, इसलिए कॉन्फ़िगरेशन करने के लिए आपको कॉन्फ़िगरेशन फ़ाइल की आवश्यकता होगी।

+0

जबकि मैं पिक्य मोड में हूं (बस अपनी खुद की पोस्ट अपडेट की गई है - वहां बहुत लापता हैं) जबकि एक .settings फ़ाइल एक एक्सएमएल फ़ाइल है, मुझे यकीन है कि यह संसाधन के रूप में बोल्ड नहीं है, है ना? साथ ही, उपयोगकर्ता-विशिष्ट मान .config फ़ाइल के बाहर, एक अलग क्षेत्र में संग्रहीत हो जाते हैं। अगर आपको गैर-डिफ़ॉल्ट सेटिंग्स मिलती हैं तो कॉन्फ़िगर फ़ाइल को तैनात करने की आवश्यकता होती है (जेनरेट सेटिंग्स क्लास के भीतर विशेषताएँ मानों को डिफॉल्ट करने का प्रबंधन करती हैं यदि कॉन्फ़िगरेशन फ़ाइल में कुछ भी निर्दिष्ट नहीं है।) –

+0

जबकि सेटिंग्स.सेटिंग xml फ़ाइल isn ' टी तैनात, सेटिंग्स। डिज़ाइनर सीएस फ़ाइल आवेदन में संकलित हो जाता है, है ना? –

0

app.config फ़ाइल ऐप के समान निर्देशिका में संग्रहीत है। सामान्य उपयोगकर्ताओं के पास लेखन अनुमति नहीं होगी (उदा। "प्रोग्राम फ़ाइलें" में)।

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

तो उपयोगकर्ता कॉन्फ़िगर करने योग्य विकल्पों के लिए सेटिंग फ़ाइल का उपयोग करें।

+0

अन्य उत्तरों के मुताबिक बिल्कुल सही नहीं है: https://stackoverflow.com/a/909712/199364, https://stackoverflow.com/a/13072966/199364 '.settings' (और विजुअल स्टूडियो 'सेटिंग्स' समर्थन) एक बार आवेदन विन्यास और प्रति उपयोगकर्ता कॉन्फ़िगरेशन दोनों के लिए इस्तेमाल किया जा सकता है। 'settings' रन-टाइम पर मौजूद नहीं है; रन-टाइम पर मौजूद है ऐप फ़ोल्डर में 'app.config' और उपयोगकर्ता के डेटा फ़ोल्डर में [उपयोगकर्ता] '.config' है। – ToolmakerSteve

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