Windows प्रपत्र C # अनुप्रयोग में कॉन्फ़िगरेशन फ़ाइल रखने का सबसे सरल तरीका है


88

मैं वास्तव में .NET के लिए नया हूं, और मुझे अभी भी यह पता नहीं चला है कि कॉन्फ़िगरेशन फाइलें कैसे काम करती हैं।

जब भी मैं इसके बारे में Google पर खोज करता हूं तो मुझे web.config के बारे में परिणाम मिलते हैं, लेकिन मैं एक Windows प्रपत्र एप्लिकेशन लिख रहा हूं।

मुझे लगा कि मुझे System.Configuration नाम स्थान का उपयोग करने की आवश्यकता है, लेकिन दस्तावेज़ मदद नहीं कर रहा है।

मैं कैसे परिभाषित करूं कि मेरी कॉन्फ़िगरेशन फ़ाइल XYZ.xml है? या क्या इसके पास कॉन्फ़िगरेशन फ़ाइल के लिए "डिफ़ॉल्ट" नाम है? मुझे अभी भी वह नहीं मिला।

इसके अलावा, मैं एक नए खंड को कैसे परिभाषित करूं? क्या मुझे वास्तव में एक वर्ग बनाने की ज़रूरत है जो कॉन्फ़िगरेशन से विरासत में मिले?

मैं इस तरह कुछ मूल्यों के साथ बस एक विन्यास फाइल करना चाहूंगा:

<MyCustomValue>1</MyCustomValue>
<MyCustomPath>C:\Some\Path\Here</MyCustomPath>

क्या इसे करने का एक सरल तरीका है? क्या आप एक सरल तरीके से समझा सकते हैं कि कैसे और कैसे एक साधारण कॉन्फ़िगरेशन फ़ाइल से पढ़ना / लिखना है?


1
.NET का आपका संस्करण क्या है? 2.0 और उच्चतर के लिए, एक बहुत ही प्यारा तरीका है जिसे सेटिंग्स कहा जाता है।
थॉमस

1
@ यह एक टाइपो था, लेकिन इसका मतलब हो सकता है "एक उदाहरण के साथ समझाएं" :)
फेबियो गोम्स

जवाबों:


121

आप एक App.Config का उपयोग करना चाहते हैं।

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

फिर आप कॉन्फ़िगरेशन / एप्लेटिंग अनुभाग में कुंजियाँ जोड़ते हैं

पसंद:

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

कर सदस्यों तक पहुँच

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

यह .NET 2 और इसके बाद के संस्करण में काम करता है।


2
वास्तव में यह .NET के सभी संस्करणों में, v1.0 के बाद से काम करता है। .NET 2.0 में नया वर्ग विन्यास प्रबंधक है।
माइक डिमिक्क

4
मैं व्यक्तिगत रूप से "एप्लिकेशन प्रॉपर्टीज" (फ्रेमवर्क 2.0 आगे की तरफ) पर "सेटिंग्स" टैब का उपयोग करता हूं क्योंकि विजुअल स्टूडियो आपकी सेटिंग्स के लिए जोरदार टाइप किए गए गुणों को कोड-जीन करेगा। वे "उपयोगकर्ता" सेटिंग्स भी शामिल कर सकते हैं जो रन टाइम पर पढ़े / लिखे जाते हैं।
एड्रियन क्लार्क

@ मैं हाँ मैं एक लग रहा था कि मामला था, लेकिन मुझे यकीन नहीं था। मैं के साथ 1. ज्यादा काम नहीं किया
qui

26
नोट ConfigurationSettingsअप्रचलित है, उपयोग करें System.Configuration.ConfigurationManager.AppSettings["MyKey"];
जेएनएफ

16
यह भी ध्यान दें, System.Configuration.ConfigurationManagerअपनी परियोजना का उपयोग करने के लिए एक संदर्भ की आवश्यकता हैSystem.Configuration.dll
dmeglio

66

पिछले उत्तरों का स्पष्टीकरण ...

  1. अपनी परियोजना में एक नई फ़ाइल जोड़ें ( जोड़ेंनई आइटमएप्लिकेशन कॉन्फ़िगरेशन फ़ाइल )

  2. नई कॉन्फ़िगरेशन फ़ाइल समाधान एक्सप्लोरर में App.Config के रूप में दिखाई देगी ।

  3. टेम्पलेट के रूप में निम्न का उपयोग करके इस फ़ाइल में अपनी सेटिंग्स जोड़ें

    <configuration>
      <appSettings>
        <add key="setting1" value="key"/>
      </appSettings>
      <connectionStrings>
        <add name="prod" connectionString="YourConnectionString"/>
      </connectionStrings>
    </configuration>
    
  4. उन्हें इस तरह प्राप्त करें:

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }
    
  5. जब निर्मित किया जाता है, तो आपके आउटपुट फ़ोल्डर में <विधानसभा नाम> .exe.config नामक एक फ़ाइल होगी। यह App.Config फ़ाइल की एक प्रति होगी । इस फ़ाइल को बनाने के लिए डेवलपर द्वारा और कोई काम नहीं किया जाना चाहिए।


1
यह मेरे लिए उपयोगी था। दो अन्य बिंदु: प्रोजेक्ट में नई फ़ाइल जोड़ते समय, एप्लिकेशन कॉन्फ़िगरेशन फ़ाइल तब मिली जब मैंने संवाद के बाईं ओर सामान्य नोड पर क्लिक किया। अपने कोड में configurationManager वर्ग का उपयोग करने के लिए, मुझे अपने संदर्भों में System.Configuration DLL जोड़ना पड़ा।
जॉन गिल्मर

28

पिछले उत्तरों के त्वरित पढ़ने से, वे सही दिखते हैं, लेकिन ऐसा नहीं लगता है कि किसी ने विजुअल स्टूडियो 2008 में नई कॉन्फ़िगरेशन सुविधाओं का उल्लेख किया है। यह अभी भी app.config (YourAppName.exe.config के लिए संकलन समय पर नकल) का उपयोग करता है , लेकिन गुण सेट करने और उनके प्रकार निर्दिष्ट करने के लिए UI विजेट है। Settings.settings पर डबल-क्लिक करेंअपने प्रोजेक्ट के "गुण" फ़ोल्डर में ।

सबसे अच्छी बात यह है कि इस संपत्ति को कोड से एक्सेस करना असुरक्षित है - कंपाइलर संपत्ति के नाम को गलत करने जैसी स्पष्ट गलतियों को पकड़ लेगा। उदाहरण के लिए, app.config में MyConnectionString नामक एक संपत्ति को एक्सेस किया जाएगा:

string s = Properties.Settings.Default.MyConnectionString;

यह VS2005 में उपलब्ध था।
ग्रेग डी

5
अच्छा है, लेकिन यह (परियोजना गुण | सेटिंग्स) कोड उत्पन्न करता है जिसे संकलित किया जाना चाहिए। यदि आप सेटिंग बदलना चाहते हैं, तो आपको ग्राहक को नई बायनेरी जारी करने की आवश्यकता है।
जॉनएल ४

@ JohnL4 यदि ये सेटिंग्स "उपयोगकर्ता" दायरे में हैं तो आप इसे प्रोग्रामेटिक रूप से बदल सकते हैं, जैसेSettings.Default.Test = "abc"; Settings.Default.Save();
Peet Brits

10

आपको एक App.config फ़ाइल ( web.config के समान) बनाना चाहिए ) ।

आपको अपनी परियोजना पर राइट क्लिक करना चाहिए, नया आइटम जोड़ना चाहिए, और नया "एप्लिकेशन कॉन्फ़िगरेशन फ़ाइल" चुनना चाहिए

सुनिश्चित करें कि आप अपने प्रोजेक्ट में System.Configuration का उपयोग कर रहे हैं।

फिर आप इसमें मान जोड़ सकते हैं:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="setting1" value="key"/>
  </appSettings>
  <connectionStrings>
    <add name="prod" connectionString="YourConnectionString"/>
  </connectionStrings>
</configuration>

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }

बस एक नोट: Microsoft के अनुसार , आपको कॉन्फ़िगरेशन के बजाय कॉन्फ़िगरेशन मैनजर का उपयोग करना चाहिए (टिप्पणी अनुभाग देखें):

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


बहुत मददगार। T.
JCMorris

विज़ुअल स्टूडियो 2015 में: प्रोजेक्ट पर क्लिक करें> संदर्भ जोड़ें। System.Configuration को ओके करने के लिए आधे रास्ते को नीचे स्क्रॉल करें, फिर नाथन की टिप्पणी के अनुसार कोड की लाइन को अपडेट करें।
रोबर्ट 70

7

कॉन्फ़िगरेशन फ़ाइल के लिए डिफ़ॉल्ट नाम [yourexe] .exe.config है। तो notepad.exe में प्रोग्राम के रूप में एक ही फ़ोल्डर में notepad.exe.config नामक एक कॉन्फ़िगरेशन फ़ाइल होगी। यह सीएलआर और फ्रेमवर्क के सभी पहलुओं के लिए एक सामान्य कॉन्फ़िगरेशन फ़ाइल है, लेकिन इसमें <appSettings>नोड के तहत आपकी अपनी सेटिंग्स हो सकती हैं ।

<appSettings>तत्व है जो रूप में पहुँचा जा सकता है नाम-मान युग्म का एक संग्रह बनाता हैSystem.Configuration.ConfigurationSettings.AppSettings । हालाँकि, कॉन्फ़िगरेशन फ़ाइल में परिवर्तन सहेजने का कोई तरीका नहीं है।

कॉन्फ़िगरेशन फ़ाइल में अपने स्वयं के कस्टम तत्वों को जोड़ना भी संभव है - उदाहरण के लिए, एक संरचित सेटिंग को परिभाषित करने के लिए - एक वर्ग बनाकर जो IConfigurationSectionHandlerइसे <configSections>कॉन्फ़िगरेशन फ़ाइल के तत्व में जोड़ देता है । फिर आप कॉल करके इसे एक्सेस कर सकते हैं ConfigurationSettings.GetConfig

.NET 2.0 एक नया वर्ग जोड़ता है, System.Configuration.ConfigurationManager , जो प्रति-सिस्टम डेटा के प्रति-उपयोगकर्ता ओवरराइड के साथ कई फ़ाइलों का समर्थन करता है। यह सेटिंग्स फ़ाइलों में वापस संशोधित कॉन्फ़िगरेशन को बचाने का भी समर्थन करता है।

विजुअल स्टूडियो एक फाइल बनाता है App.config, जिसे वह सही नाम के साथ EXE फ़ोल्डर में कॉपी करता है, जब प्रोजेक्ट बनाया जाता है।


6

.NET अनुप्रयोग कॉन्फ़िगरेशन के बारे में सबसे अच्छा (IMHO) लेख CodeProject पर है । .NET 2.0 कॉन्फ़िगरेशन के रहस्यों को उजागर करना । और .NET कॉन्फ़िगरेशन फ़ाइलों में अनुभागों के बारे में मेरा अगला पसंदीदा (छोटा) लेख अंडर सेक्शन हैंडलर्स - App.config फ़ाइल को समझना है


यह वास्तव में उपयोगकर्ता द्वारा पूछा गया सबसे सरल तरीका नहीं है, लेकिन .NET 2.0 कॉन्फ़िगरेशन के रहस्यों को उजागर करना वास्तव में लेखों की एक महान श्रृंखला है।
रिकार्डो एमोर्स

3

विंडोज फॉर्म में, आपके पास app.configफाइल होती है, जो फाइल के समान होती है web.config। लेकिन जब से मैं देख रहा हूं कि आपको इसकी आवश्यकता है कस्टम मान हैं, मैं सुझाव देता हूं कि सेटिंग्स का उपयोग करें ।

ऐसा करने के लिए, अपने प्रोजेक्ट गुण खोलें, और फिर सेटिंग पर जाएं। यदि सेटिंग्स फ़ाइल मौजूद नहीं है, तो आपके पास एक बनाने के लिए एक लिंक होगा। फिर, आप वहां दिखाई देने वाली तालिका में सेटिंग्स जोड़ सकते हैं, जो उपयुक्त एक्सएमएल और एक सेटिंग्स दोनों उत्पन्न करेगा को लोड करने और सहेजने के लिए उपयोग किया जा सकता है।

सेटिंग्स क्लास को कुछ इस तरह नामित किया जाएगा DefaultNamespace.Properties.Settings। फिर, आप के समान कोड का उपयोग कर सकते हैं:

using DefaultNamespace.Properties;

namespace DefaultNamespace {
    class Class {
        public int LoadMySettingValue() {
            return Settings.Default.MySettingValue;
        }
        public void SaveMySettingValue(int value) {
            Settings.Default.MySettingValue = value;
        }
    }
}

2

मैं अन्य उत्तरों से सहमत हूं जो आपको app.config की ओर इशारा करते हैं। हालांकि, app.config से सीधे मूल्यों को पढ़ने के बजाय, आपको उन्हें पढ़ने और संपत्तियों के रूप में उजागर करने के लिए एक उपयोगिता वर्ग बनाना चाहिए (AppSettings नाम मैं उपयोग करता हूं)। AppSettings वर्ग का उपयोग कई स्टोरों से सेटिंग्स को एकत्र करने के लिए किया जा सकता है, जैसे कि app.config और विधानसभा से असेंबली संस्करण की जानकारी (विधानसभा और विधानसभाफाइलवर्जन)।


2

ऐसा करने का एक बहुत ही सरल तरीका है अपने स्वयं के कस्टम Settingsवर्ग का उपयोग करना ।


Msdn.microsoft.com/en-us/library/… पर ApplicationSettings के लिए कम क्रिया लिंक के लिए +1, जो कॉन्फ़िगरेशन प्रबंधक कार्यान्वयन की तुलना में सरल लगता है। / सेट सेटिंग्स प्राप्त करें, "XML शेपिंग" के बारे में परवाह न करें।
मैक्सवेल

1

उपयोग:

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

AppSettings को हटा दिया गया है और अब अप्रचलित ( लिंक) माना जाता है ) ।

इसके अलावा, app.config के ऐपसेटिंग अनुभाग को एप्लिकेशनसेटिंग द्वारा बदल दिया गया है अनुभाग ।

जैसा कि किसी और ने उल्लेख किया है, आपको System.Configuration.ConfigurationManager ( लिंक ) का उपयोग करना चाहिए जो .NET 2.0 के लिए नया है।


कॉन्फ़िगरेशन सेट अपसेट नहीं अपितु अपग्रेड किया गया है।
टॉबी

0

.NET और विजुअल स्टूडियो के किस संस्करण का आप उपयोग कर रहे हैं?

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.