.NET में app.config या web.config से सेटिंग पढ़ना


806

मैं एक C # क्लास लाइब्रेरी पर काम कर रहा हूं, जिसे web.configया app.configफाइल से सेटिंग्स को पढ़ने में सक्षम होना चाहिए (यह निर्भर करता है कि DLL ASP.NET वेब एप्लिकेशन या विंडोज फॉर्म एप्लीकेशन से संदर्भित है)।

मैंने पाया है कि

ConfigurationSettings.AppSettings.Get("MySetting")

काम करता है, लेकिन उस कोड को Microsoft द्वारा पदावनत के रूप में चिह्नित किया गया है।

मैंने पढ़ा है कि मुझे प्रयोग करना चाहिए:

ConfigurationManager.AppSettings["MySetting"]

हालाँकि, System.Configuration.ConfigurationManagerकक्षा C # क्लास लाइब्रेरी प्रोजेक्ट से उपलब्ध नहीं लगती है।

इसे करने का बेहतरीन तरीका क्या है?


48
जैसे मैंने 4 MSDN उदाहरण और लेख पढ़े .. और यहाँ उतरा। बस एक संदर्भ जोड़ें .. वे ऐसा क्यों नहीं कह सकते। अच्छा प्रश्न! +1
पायोत्र कुला

1
यदि आप सेटिंग्स को वापस लिखना चाहते हैं , तो यहां देखें कि आप इसे कैसे कर सकते हैं।
मैट

जवाबों:


797

आप की आवश्यकता होगी एक संदर्भ जोड़ने के लिए System.Configurationअपनी परियोजना के दशक में संदर्भ फ़ोल्डर

आपको निश्चित रूप ConfigurationManagerसे अप्रचलित का उपयोग करना चाहिए ConfigurationSettings


आपका बहुत बहुत धन्यवाद! बहुत सीधे आगे जवाब। मैं एक कंसोल ऐप बना रहा था! और यह जवाब दिन बचाओ!
पाटसनलाइनर

1
क्या यह अभी भी .net कोर के लिए सटीक है।
त्रिवेंको

867

नीचे की तरह एक नमूना app.config फ़ाइल के लिए:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="countoffiles" value="7" />
    <add key="logfilelocation" value="abc.txt" />
  </appSettings>
</configuration>

आप नीचे दिखाए गए कोड का उपयोग करके उपरोक्त एप्लिकेशन सेटिंग्स पढ़ते हैं:

using System.Configuration;

System.Configurationयदि आपके पास पहले से ही एक नहीं है, तो आपको अपनी परियोजना में एक संदर्भ भी जोड़ना पड़ सकता है । आप फिर जैसे मानों का उपयोग कर सकते हैं:

string configvalue1 = ConfigurationManager.AppSettings["countoffiles"];
string configvalue2 = ConfigurationManager.AppSettings["logfilelocation"];

124
मुझे स्वीकृत उत्तर से अधिक आपका उत्तर पसंद है। उदाहरण के साथ जवाब हमेशा मेरे लिए चाल है।
ब्रेंडन वोग

इसने मेरे लिए काम किया। हालाँकि, मेरे System.Configuration में कॉन्फ़िगरेशन मैनजर नहीं है, इसलिए मुझे कॉन्फ़िगरेशनसेटिंग का उपयोग करना पड़ा। विडंबना यह है कि मुझे अभी भी चेतावनी मिली है कि यह अप्रचलित था।
दुःस्वप्न खेल 21

13
यह मेरे साथ भी हुआ। क्या आपने System.Configuration reference जोड़ने की कोशिश की है? समस्या यह है कि वीएस आपको बेवकूफ बनाता है आपको लगता है कि आपके पास वास्तव में यह है; आप नामस्थान सिस्टम को प्राप्त करने के लिए intellisense का उपयोग कर सकते हैं। विन्यास करें लेकिन इसमें कॉन्फ़िगरेशन प्रबंधक वर्ग नहीं है। बस संदर्भ जोड़ें और जो इसे ठीक करता है।
फ्रांसिन डेग्रोड टेलर

3
@Cricketheads System.Configuration में कॉन्फ़िगरेशन मैनजर शामिल है, आप संभवतः अपने प्रोजेक्ट में System.Configuration का संदर्भ याद कर रहे हैं।
ट्रेक

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

89

.NET फ्रेमवर्क 4.5 और 4.6 के लिए अपडेट; निम्नलिखित अब काम नहीं करेगा:

string keyvalue = System.Configuration.ConfigurationManager.AppSettings["keyname"];

अब गुण के माध्यम से सेटिंग वर्ग तक पहुँचें:

string keyvalue = Properties.Settings.Default.keyname;

अधिक जानकारी के लिए एप्लिकेशन सेटिंग प्रबंधित करना देखें ।


1
2010 से गुण ।
निक वेस्टगेट

1
इस पोस्ट के लिए बहुत बहुत धन्यवाद। मैंने निर्धारित किया कि Properties.Settings.Default.MachName ने काम किया, लेकिन मैं समझ नहीं पाया कि कॉन्फ़िगरेशन मैनजर.ऐपसेटिंग ["मचनाम"] क्यों नहीं लौटा।
जे। क्रिस कोम्पटन

1
इससे मेरी लम्बी तड़प समाप्त हो गई। धन्यवाद। ढांचे को आपको चेतावनी देनी चाहिए कि पुराना तरीका पुराना है।
नील बी

7
पुष्टि नहीं कर सकता। ConfigurationManager.AppSettings ["someKey"] .NET 4.5, 4.6, 4.7.1 में काम करता है
Ivanhoe

1
@Ivanhoe VisualStudio के किस संस्करण का आपने उपयोग किया? ConfigurationManager.AppSettings ["someKey"] ने 4.6.1 और VS 15.8.2 के साथ काम किया लेकिन मेरे लिए 4.6.1 और VS 15.9.2 के साथ असफल रहा।
कुकिला

37

अपनी कक्षा की लाइब्रेरी पर राइट क्लिक करें, और मेनू से "संदर्भ जोड़ें" विकल्प चुनें।

और .NET टैब से, System.Configuration चुनें। इसमें आपके प्रोजेक्ट में System.Configuration DLL फ़ाइल शामिल होगी।


संदर्भ जोड़ने के बाद, ऐसा करने में सक्षम थाConfigurationManager.ConnectionStrings[0].ConnectionString
SushiGuy

29

मैं इसका उपयोग कर रहा हूं, और यह मेरे लिए अच्छा काम करता है:

textBox1.Text = ConfigurationManager.AppSettings["Name"];

48
टीएस स्पष्ट रूप से कहता है, कि वह एक ही कोड का उपयोग करता है, लेकिन उसका प्रोजेक्ट संकलित करने में विफल रहता है (लापता संदर्भों के कारण, जैसा कि यह निकला)। -1 प्रश्न न पढ़ने के लिए।
इसनिपोव

23

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

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

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

    string value = Properties.Settings.Default.keyname;

कॉन्फ़िगरेशन में सहेजें:

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

1
FYI करें: Google को आपका उत्तर सबसे अच्छा लगता है। जब आप "एप्लिकेशन कॉन्‍फ़िगरेशन सेटिंग c #" खोजते हैं, तो शब्दश: दिखाता है
स्टीव गोमेज़


18

आप DLL फ़ाइल में App.config फ़ाइल जोड़ सकते हैं। App.Config केवल निष्पादन योग्य परियोजनाओं के लिए काम करता है, क्योंकि सभी DLL फ़ाइलें EXE फ़ाइल के निष्पादन के लिए कॉन्फ़िगरेशन फ़ाइल से कॉन्फ़िगरेशन लेती हैं।

मान लीजिए कि आपके समाधान में दो परियोजनाएँ हैं:

  • SomeDll
  • SomeExe

आपकी समस्या इस तथ्य से संबंधित हो सकती है कि आप SomeDLL में app.config फ़ाइल को शामिल कर रहे हैं और SomeExe को नहीं। SomeDll SomeExe प्रोजेक्ट से कॉन्फ़िगरेशन को पढ़ने में सक्षम है।


वाह, यह स्पष्ट नहीं है। अगर कोई इस बारे में बात करते हुए किसी दस्तावेज़ को लिंक कर सकता है, तो यह शानदार होगा। यह खोज करने के लिए एक कठिन विषय है।
डेविड क्राइडर

इसके लिए धन्यवाद। कहीं भी यह नहीं कहा गया है।
पैरामीटर

10

इसे इस्तेमाल करे:

string keyvalue = System.Configuration.ConfigurationManager.AppSettings["keyname"];

में web.config फ़ाइल यह अगले संरचना होना चाहिए:

<configuration>
<appSettings>
<add key="keyname" value="keyvalue" />
</appSettings>
</configuration>

8

मुझे भी यही समस्या थी। बस उन्हें इस तरह से पढ़ें: System.Configuration.ConfigurationSettings.AppSettings ["MySetting"]


4
विन्यास के बारे में Microsoft के अनुसार। This method is obsolete, it has been replaced by System.Configuration!System.Configuration.ConfigurationManager.AppSettings
पीटर एम।

2
यह विधि अप्रचलित है
गेब्रियलबी

7

web.configवेब अनुप्रयोगों के साथ प्रयोग किया जाता है। web.configडिफ़ॉल्ट रूप से वेब एप्लिकेशन के लिए कई कॉन्फ़िगरेशन आवश्यक हैं। web.configआपके वेब एप्लिकेशन के अंतर्गत प्रत्येक फ़ोल्डर के लिए आपके पास हो सकता है ।

app.configविंडोज अनुप्रयोगों के लिए प्रयोग किया जाता है। जब आप Visual Studio में एप्लिकेशन का निर्माण करते हैं, तो यह स्वचालित रूप से नाम बदल दिया जाएगा <appname>.exe.configऔर इस फ़ाइल को आपके आवेदन के साथ डिलीवर करना होगा।

आप app settingsदोनों कॉन्फ़िगरेशन फ़ाइलों से मानों को कॉल करने के लिए एक ही विधि का उपयोग कर सकते हैं : System.Configuration.ConfigurationSettings.AppSettings ["कुंजी"]


System.Configuration.COnfigurationSettings.AppSettings.Get("Key")वर्ग कोष्ठक का उपयोग करने के बजाय इसका उपयोग करना भी संभव है ।
मेसन

7

जैसा कि मैंने सिस्टम पर एक रैपर क्लास बनाकर एक व्यवस्थित तरीके से एप्लिकेशन सेटिंग्स चर तक पहुंचने का सबसे अच्छा तरीका पाया है। नीचे की ओर

public class BaseConfiguration
{
    protected static object GetAppSetting(Type expectedType, string key)
    {
        string value = ConfigurationManager.AppSettings.Get(key);
        try
        {
            if (expectedType == typeof(int))
                return int.Parse(value);
            if (expectedType == typeof(string))
                return value;

            throw new Exception("Type not supported.");
        }
        catch (Exception ex)
        {
            throw new Exception(string.Format("Config key:{0} was expected to be of type {1} but was not.",
                key, expectedType), ex);
        }
    }
}

अब हम नीचे दिए गए अन्य वर्ग का उपयोग करके हार्ड कोडित नामों द्वारा आवश्यक सेटिंग्स चर तक पहुंच सकते हैं:

public class ConfigurationSettings:BaseConfiguration
{
    #region App setting

    public static string ApplicationName
    {
        get { return (string)GetAppSetting(typeof(string), "ApplicationName"); }
    }

    public static string MailBccAddress
    {
        get { return (string)GetAppSetting(typeof(string), "MailBccAddress"); }
    }

    public static string DefaultConnection
    {
        get { return (string)GetAppSetting(typeof(string), "DefaultConnection"); }
    }

    #endregion App setting

    #region global setting


    #endregion global setting
}

यह उस विधि का उपयोग करता है जो ओपी बिंदुओं को पदावनत के रूप में चिह्नित करता है।
user2864740

4

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

इसलिए ConfigurationManager.AppSettings["something"];सुझाए गए का उपयोग करें और इस मान को लौटाएं। इस विधि से आप .config फ़ाइल में कोई कुंजी उपलब्ध नहीं होने पर कुछ प्रकार के डिफ़ॉल्ट रिटर्न बना सकते हैं।


3
: माइक्रोसॉफ्ट पहले से ही एक bulit में जिस तरह से एक ही config फ़ाइल के एकाधिक संस्करण का प्रबंधन करने के लिए किया निर्माण विन्यास : जो प्रत्येक निर्माण विन्यास के लिए अलग कॉन्फ़िग फ़ाइलों होने की अनुमति देते हैं, app.DEBUG.config, app.RELEASE.config, और app.TEST.configआदि,
jpaugh

4

इसके अलावा, आप फॉर्मो का उपयोग कर सकते हैं :

विन्यास:

<appSettings>
    <add key="RetryAttempts" value="5" />
    <add key="ApplicationBuildDate" value="11/4/1999 6:23 AM" />
</appSettings>

कोड:

dynamic config = new Configuration();
var retryAttempts1 = config.RetryAttempts;                 // Returns 5 as a string
var retryAttempts2 = config.RetryAttempts(10);             // Returns 5 if found in config, else 10
var retryAttempts3 = config.RetryAttempts(userInput, 10);  // Returns 5 if it exists in config, else userInput if not null, else 10
var appBuildDate = config.ApplicationBuildDate<DateTime>();

5
पृथ्वी पर आप ऐसा क्यों करना चाहेंगे?
ल्यूकजकॉव

3

पूर्णता के लिए, केवल वेब परियोजनाओं के लिए एक और विकल्प उपलब्ध है: System.Web.Configuration.WebConfigurationManager.AppSettings ["MySetting"]

इसका लाभ यह है कि इसे जोड़ने के लिए अतिरिक्त संदर्भ की आवश्यकता नहीं है, इसलिए यह कुछ लोगों के लिए बेहतर हो सकता है।


3

चरण 1: संदर्भ जोड़ने के लिए संदर्भ टैब पर राइट-क्लिक करें।

चरण 2: असेंबली टैब पर क्लिक करें

चरण 3: 'System.Configuration' के लिए खोजें

चरण 4: ठीक पर क्लिक करें।

तब यह काम करेगा।

 string value = System.Configuration.ConfigurationManager.AppSettings["keyname"];

2

मैं हमेशा सभी विन्यास मूल्यों के लिए घोषित प्रकार के गुणों के साथ एक IConfig इंटरफ़ेस बनाता हूं। एक कॉन्फ़िगरेशन कार्यान्वयन वर्ग तब कॉल को System.Configuration को लपेटता है। आपके सभी System.Configuration कॉल्स अब एक ही स्थान पर हैं, और यह बहुत आसान है और बनाए रखने और ट्रैक करने के लिए क्लीनर है कि किस फ़ील्ड का उपयोग किया जा रहा है और अपने डिफ़ॉल्ट मानों की घोषणा करें। मैं सामान्य डेटा प्रकारों को पढ़ने और पार्स करने के लिए निजी सहायक विधियों का एक सेट लिखता हूं।

एक का उपयोग करते हुए आईओसी ढांचे आप IConfig उपयोग कर सकते हैं कहीं भी बस एक वर्ग निर्माता के लिए इंटरफ़ेस पास करके फ़ील्ड अपने में आवेदन। फिर आप अपने यूनिट परीक्षणों में IConfig इंटरफ़ेस का नकली कार्यान्वयन बनाने में सक्षम हैं ताकि आप अपने App.config या Web.config फ़ाइल को छूने की आवश्यकता के बिना विभिन्न कॉन्फ़िगरेशन मानों और मान संयोजनों का परीक्षण कर सकें।


1

एक अन्य संभावित समाधान:

var MyReader = new System.Configuration.AppSettingsReader();
string keyvalue = MyReader.GetValue("keyalue",typeof(string)).ToString();

1

मैं कुछ दिनों के लिए इसी मुद्दे को हल करने की कोशिश कर रहा हूं। मैं web.config फ़ाइल में appsettings टैग के भीतर एक कुंजी जोड़कर इसे हल करने में सक्षम था । यह सहायक का उपयोग करते समय .dll फ़ाइल को ओवरराइड करना चाहिए।

<configuration>
    <appSettings>
        <add key="loginUrl" value="~/RedirectValue.cshtml" />
        <add key="autoFormsAuthentication" value="false"/>
    </appSettings>
</configuration>

1

आप नीचे दी गई लाइन का उपयोग कर सकते हैं। मेरे मामले में यह काम कर रहा था: System.Configuration.ConfigurationSettings.AppSettings ["yourKeyName"]

आपको ध्यान रखना चाहिए कि कोड की उपरोक्त पंक्ति भी पुराना संस्करण है और यह नए पुस्तकालयों में पदावनत है।


1

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

ऐसा करने के लिए आपको उपयोग करना चाहिए

{YourAppName}.Properties.Settings.{settingName}


1

मैं .NET कोर परियोजनाओं के लिए नीचे दिए गए दृष्टिकोण को प्राप्त करने में सक्षम था:

कदम:

  1. अपनी परियोजना में एक appsettings.json (नीचे दिया गया प्रारूप) बनाएं।
  2. अगला एक कॉन्फ़िगरेशन क्लास बनाएँ। प्रारूप नीचे दिया गया है।
  3. मैंने कॉन्फ़िगरेशन क्लास के उपयोग को दिखाने के लिए एक लॉगिन () विधि बनाई है।

    सामग्री के साथ अपने प्रोजेक्ट में appsettings.json बनाएँ:

    {
      "Environments": {
        "QA": {
          "Url": "somevalue",
     "Username": "someuser",
          "Password": "somepwd"
      },
      "BrowserConfig": {
        "Browser": "Chrome",
        "Headless": "true"
      },
      "EnvironmentSelected": {
        "Environment": "QA"
      }
    }
    
    public static class Configuration
    {
        private static IConfiguration _configuration;
    
        static Configuration()
        {
            var builder = new ConfigurationBuilder()
                .AddJsonFile($"appsettings.json");
    
            _configuration = builder.Build();
    
        }
        public static Browser GetBrowser()
        {
    
            if (_configuration.GetSection("BrowserConfig:Browser").Value == "Firefox")
            {
                return Browser.Firefox;
            }
            if (_configuration.GetSection("BrowserConfig:Browser").Value == "Edge")
            {
                return Browser.Edge;
            }
            if (_configuration.GetSection("BrowserConfig:Browser").Value == "IE")
            {
                return Browser.InternetExplorer;
            }
            return Browser.Chrome;
        }
    
        public static bool IsHeadless()
        {
            return _configuration.GetSection("BrowserConfig:Headless").Value == "true";
        }
    
        public static string GetEnvironment()
        {
            return _configuration.GetSection("EnvironmentSelected")["Environment"];
        }
        public static IConfigurationSection EnvironmentInfo()
        {
            var env = GetEnvironment();
            return _configuration.GetSection($@"Environments:{env}");
        }
    
    }
    
    
    public void Login()
    {
        var environment = Configuration.EnvironmentInfo();
        Email.SendKeys(environment["username"]);
        Password.SendKeys(environment["password"]);
        WaitForElementToBeClickableAndClick(_driver, SignIn);
    }

1

यदि आपकी जरूरत है / ConfigurationManagerवर्ग का उपयोग करना चाहते हैं ...

आपको System.Configuration.ConfigurationManagerMicrosoft द्वारा NuGet पैकेज मैनेजर के माध्यम से लोड करने की आवश्यकता हो सकती है

उपकरण-> NuGet पैकेज मैनेजर-> समाधान के लिए NuGet पैकेज प्रबंधित करें ...

Microsoft डॉक्स

डॉक्स से एक बात ध्यान देने योग्य है ...

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


0

कृपया उस .NET संस्करण की जाँच करें, जिस पर आप काम कर रहे हैं। यह 4 से अधिक होना चाहिए। और आपको अपने आवेदन में System.Configuration सिस्टम लाइब्रेरी को जोड़ना होगा।


3
यह प्रश्न 9 साल पहले पूछा गया था, और पहले से ही 20 से अधिक उत्तर हैं, जिनमें 2 शामिल हैं, जिनमें से प्रत्येक में 600 से अधिक upvotes हैं, स्वीकृत उत्तर में System.Configuration का संदर्भ जोड़ना है। यह अतिरिक्त उत्तर मान नहीं जोड़ता है। सबसे अच्छे रूप में, यह स्वीकृत उत्तर पर टिप्पणी होनी चाहिए।
रिचर्डिसिमो

पुन : "4 से अधिक" : प्रमुख संस्करण संख्या में? या क्या आपका मतलब है "4.0 से अधिक" ? या दूसरे शब्दों में, .NET फ्रेमवर्क 4.5 किस तरफ होगा ?
पीटर मोर्टेनसेन

-8

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

<applicationSettings>
    <MyApp.My.MySettings>
        <setting name="Printer" serializeAs="String">
            <value>1234 </value>
        </setting>
    </MyApp.My.MySettings>
</applicationSettings>

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