AppSettings को .config फ़ाइल से मान मिलता है


172

मैं कॉन्फ़िगरेशन फ़ाइल में मानों तक पहुंचने में सक्षम नहीं हूं।

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var clientsFilePath = config.AppSettings.Settings["ClientsFilePath"].Value; 
// the second line gets a NullReferenceException

.config फ़ाइल :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <!-- ... -->
    <add key="ClientsFilePath" value="filepath"/>
    <!-- ... -->
  </appSettings>
</configuration>

क्या आपके पास कोई सुझाव है कि मुझे क्या करना चाहिए?

जवाबों:


345

यह मेरे लिए काम करता है:

string value = System.Configuration.ConfigurationManager.AppSettings[key];

6
आपके द्वारा प्रदान किए गए कोड को YourProgram.exe.config फ़ाइल में YourProgram.exe के समान फ़ोल्डर में मौजूद होना चाहिए। बस वहाँ सुनिश्चित करें। एक सामान्य त्रुटि गंतव्य निर्देशिका के लिए app.config फ़ाइल की प्रतिलिपि बनाना है, जो काम नहीं करेगा।
एडम

40
संदर्भ जोड़ने की आवश्यकता है System.Configuration
चेकसम

13
मेरा .NET 4.5 System.Configuration नहीं हैConfigurationManager
qwert_ukg

3
मैं भी एक 4.5 परियोजना में एक अशक्त हो रही है - इस पर दो घंटे बिताए .. एक बग होना चाहिए।
आइरिशचाइंड

1
मैं भी इसे एक मल्टी-टारगेट एप्लिकेशन में देख रहा हूं, मेरा .net कोर कॉन्फिगरेशन काम करता है। लेकिन नेट फ्रेमवर्क कॉन्फिगरेशन (कॉन्फ़िगरेशन
माइकल ब्राउन

61

Dtsg ने जो जवाब दिया वह काम करता है:

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];

लेकिन, आपको एक विधानसभा संदर्भ जोड़ना होगा

प्रणाली विन्यास

अपने समाधान एक्सप्लोरर पर जाएं और संदर्भ पर राइट क्लिक करें और संदर्भ जोड़ें का चयन करें । असेंबली टैब का चयन करें और कॉन्फ़िगरेशन के लिए खोजें ।

संदर्भ प्रबंधक

यहाँ मेरे App.config का एक उदाहरण है :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <appSettings>
    <add key="AdminName" value="My Name"/>
    <add key="AdminEMail" value="MyEMailAddress"/>
  </appSettings>
</configuration>

जिसे आप निम्नलिखित तरीके से प्राप्त कर सकते हैं:

string adminName = ConfigurationManager.AppSettings["AdminName"];

2
मुझे ओपी के रूप में एक ही मुद्दा है। VS2015 का उपयोग करना। मुझे नहीं पता कि कैसे या क्यों, लेकिन मेरा संदर्भ System.Configuration System.configuration (निचला मामला) कहता है ।
टिम

यह कवर करने के लिए जहां कोई "असेंबली" टैब (कम से कम VS2019) नहीं है
व्यक्ति

21

यह एक जाने दो:

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];

4
आपका इसे लागू करना गलत होना चाहिए। यह निश्चित रूप से एक विन्यास फाइल से प्रमुख मूल्यों को प्राप्त करने के लिए काम करता है।
dtsg

सुनिश्चित करें कि आप अपने प्रोजेक्ट के संदर्भ में System.Configuration का संदर्भ जोड़ सकते हैं!
ग्राहमज

19

विन्यास से पढ़ें:

आपको कॉन्फ़िगर करने के लिए एक संदर्भ जोड़ना होगा

  1. अपनी परियोजना पर "गुण" खोलें
  2. "सेटिंग" टैब पर जाएं
  3. "नाम" और "मान" जोड़ें
  4. निम्नलिखित कोड का उपयोग करके मूल्य प्राप्त करें:
string value = Properties.Settings.Default.keyname;

कॉन्फ़िगर करने के लिए सहेजें:

Properties.Settings.Default.keyName = value;
Properties.Settings.Default.Save();

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

2
यह मेरे लिए भी काम किया। मुझे nullउपरोक्त सिफारिशों के साथ एक स्ट्रिंग मिल रही थी , लेकिन Properties.Settings.Default.<keyName>एक आकर्षण की तरह काम किया!
डब स्टाइल

1
उत्तम ! मैं इस के लिए देख रहा था :) धन्यवाद!
HSQL

@ मसूद सियाकली, पिछले हफ्ते मैंने आपके अपने प्रोजेक्ट में यहां बहुत कुछ करने की कोशिश की, लेकिन मूल्यों, जब रन टाइम में उपयोगकर्ता द्वारा बदला जाता है (बस इसे अभी के लिए वीएस जीयूआई से चला रहा है) उदाहरणों में जारी नहीं है। मेरा प्रश्न: stackoverflow.com/questions/61018443/… । अभी भी यह नहीं पता लगा है कि उन मूल्यों की उपयोगकर्ता-परिवर्तित सेटिंग्स क्यों नहीं बनी रहती हैं ...
मार्की

8

मै इस्तेमाल कर रहा हूँ:

    ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
    //configMap.ExeConfigFilename = @"d:\test\justAConfigFile.config.whateverYouLikeExtension";
    configMap.ExeConfigFilename = AppDomain.CurrentDomain.BaseDirectory + ServiceConstants.FILE_SETTING;
    Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
    value1 = System.Configuration.ConfigurationManager.AppSettings["NewKey0"];
    value2 = config.AppSettings.Settings["NewKey0"].Value;
    value3 = ConfigurationManager.AppSettings["NewKey0"];

जहाँ value1 = ... और value3 = ... शून्य देता है और value2 = ... कार्य करता है

तब मैंने आंतरिक app.config को बदलने का फैसला किया:

// Note works in service but not in wpf
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"d:\test\justAConfigFile.config.whateverYouLikeExtension");
ConfigurationManager.RefreshSection("appSettings");

string value = ConfigurationManager.AppSettings["NewKey0"];

VS2012 .net 4 का उपयोग करना


मुझे ठीक इसी की आवश्यकता थी। वास्तव में उपयोगी, धन्यवाद।
उमुट OVECOGLU

5

में app/web.configफ़ाइल निम्न कॉन्फ़िगरेशन सेट:

<configuration>
  <appSettings>
    <add key="NameForTheKey" value="ValueForThisKey" />
    ... 
    ...    
  </appSettings>
...
...
</configuration>

तब आप इस लाइन में डालकर इसे अपने कोड में एक्सेस कर सकते हैं:

string myVar = System.Configuration.ConfigurationManager.AppSettings["NameForTheKey"];

* ध्यान दें कि यह काम ठीक है .net4.5.xऔर .net4.6.x; लेकिन काम नहीं करते .net core। सबसे अच्छा संबंध: राफेल


3

लंबे समय के बाद इस पर वापस आ रहा है ...

विन्यास प्रबंधक के निधन को देखते हुए, किसी के लिए अभी भी इस कोशिश का जवाब तलाश रहा है (उदाहरण के लिए):

AppSettingsReader appsettingsreader = new AppSettingsReader();
string timeAsString = (string)(new AppSettingsReader().GetValue("Service.Instance.Trigger.Time", typeof(string)));

System.Configuration की आवश्यकता है।

(वास्तव में काम करता है और पढ़ने के लिए सरल है कुछ करने के लिए कोड संपादित)


अच्छा जवाब, लेकिन कृपया सफाई करें, AppSettingsReader का नया उदाहरण क्यों बनाते हैं जब आप AppSettingsReader को फिर से बनाते हैं, और आपको स्ट्रिंग को डालने की आवश्यकता नहीं होती है, तो आप इसे समाप्त कर सकते हैं .ToString ()
मेथम-ɯɐɥʇʎɐɯ

2

देखिए मैंने वही किया जो मुझे लगा कि स्पष्ट बात है:

string filePath = ConfigurationManager.AppSettings.GetValues("ClientsFilePath").ToString();

जबकि यह संकलित है कि यह हमेशा अशक्त है।

हालांकि यह (ऊपर से) काम करता है:

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];

2

कुछ उत्तर IMO से थोड़ा हटकर लगते हैं। यहाँ मेरा टेक सर्मा 2016 है

<add key="ClientsFilePath" value="filepath"/>

सुनिश्चित करें कि System.Configurationसंदर्भित है।

प्रश्न एक एप्लेटिंग कुंजी का मूल्य पूछ रहा है

जो निश्चित रूप से होना चाहिए

  string yourKeyValue = ConfigurationManager.AppSettings["ClientsFilePath"]

  //yourKeyValue should hold on the HEAP  "filepath"

यहां एक ऐसा मोड़ है जिसमें आप एक साथ मूल्यों को समूह बना सकते हैं (इस प्रश्न के लिए नहीं)

var emails = ConfigurationManager.AppSettings[ConfigurationManager.AppSettings["Environment"] + "_Emails"];

emails पर्यावरण कुंजी का मान होगा + "_Emails"

example :   jack@google.com;thad@google.com;

2

वेब एप्लिकेशन के लिए, मैं सामान्य रूप से इस विधि को लिखूंगा और इसे कुंजी के साथ कॉल करूंगा।

private String GetConfigValue(String key)
    {
       return System.Web.Configuration.WebConfigurationManager.AppSettings[key].ToString();
    }

1

आप बस टाइप कर सकते हैं:

string filePath = Sysem.Configuration.ConfigurationManager.AppSettings[key.ToString()];

क्योंकि keyएक वस्तु है और AppSettingsएक स्ट्रिंग लेता है


1
ConfigurationManager.RefreshSection("appSettings")
string value = System.Configuration.ConfigurationManager.AppSettings[key];

1

या आप या तो उपयोग कर सकते हैं

string value = system.configuration.ConfigurationManager.AppSettings.Get("ClientsFilePath");

//Gets the values associated with the specified key from the System.Collections.Specialized.NameValueCollection

0

यहां अन्य उत्तरों की सलाह के बाद मेरा सरल परीक्षण भी विफल रहा - जब तक मुझे एहसास नहीं हुआ कि मैंने अपने डेस्कटॉप एप्लिकेशन में जो कॉन्फिग फाइल जोड़ी थी, उसे "App1.config" नाम दिया गया था। मैंने इसे "App.config" का नाम दिया और सब कुछ तुरंत काम किया जैसा कि इसे चाहिए।


0
  1. अपनी परियोजना पर "गुण" खोलें
  2. "सेटिंग" टैब पर जाएं
  3. "नाम" और "मान" जोड़ें

कोडे स्वचालित रूप से उत्पन्न होंगे

    <configuration>
      <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup ..." ... >
          <section name="XX....Properties.Settings" type="System.Configuration.ClientSettingsSection ..." ... />
        </sectionGroup>
      </configSections>
      <applicationSettings>
        <XX....Properties.Settings>
          <setting name="name" serializeAs="String">
            <value>value</value>
          </setting>
          <setting name="name2" serializeAs="String">
            <value>value2</value>
          </setting>
       </XX....Properties.Settings>
      </applicationSettings>
    </configuration>

मान प्राप्त करना

Properties.Settings.Default.Name

या

Properties.Settings.Default [ "नाम"]

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