ConfigurationManager.AppSettings - कैसे संशोधित करें और सहेजें?


81

यह पूछने के लिए बहुत कठिन लग सकता है और मैं लेखों में सुझाए गए कामों को करता हूं, फिर भी यह अपेक्षा के अनुरूप काम नहीं करता है। आशा है कि कोई मुझे सही दिशा की ओर संकेत कर सकता है।

मैं प्रति AppSettings उपयोक्ताओं की बचत करना चाहूंगा।

Winform बंद होने के बाद मैं इसे ट्रिगर करता हूं:

conf.Configuration config = 
           ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

if (ConfigurationManager.AppSettings["IntegrateWithPerforce"] != null)
    ConfigurationManager.AppSettings["IntegrateWithPerforce"] = 
                                           e.Payload.IntegrateCheckBox.ToString();
else
    config.AppSettings.Settings.Add("IntegrateWithPerforce", 
                                          e.Payload.IntegrateCheckBox.ToString());

config.Save(ConfigurationSaveMode.Modified);

तो पहली बार जब प्रवेश अभी तक मौजूद नहीं है, तो यह बस इसे बनाएगा, अन्यथा यह मौजूदा प्रविष्टि को संशोधित करेगा। हालांकि यह नहीं बचाता है।

1) मैं क्या गलत कर रहा हूँ?

2) मैं कहां से ऐप सेटिंग के लिए उपयोगकर्ताओं को फिर से सहेजने की उम्मीद कर रहा हूं? क्या यह डिबग फ़ोल्डर या C: \ Documents and Settings \ USERNAME \ Local Settings \ Application Data फ़ोल्डर में है?




3
यह उस फ़ोल्डर में होगा जो निष्पादन योग्य में स्थित है। इसलिए यदि आप इसे डीबग के तहत विजुअल स्टूडियो से चला रहे हैं तो यह आपके प्रोजेक्ट के डीबग फ़ोल्डर में होगा।
जस्टिन

1
Ditto जस्टिन ने क्या कहा। और यदि आप विजुअल स्टूडियो से भाग रहे हैं, तो यह आपके प्रोजेक्ट के डीबग फ़ोल्डर में हर बार आपके आवेदन को फिर से चलाने के लिए .config फ़ाइल को छोड़ देगा।
वेल्टन v3.60

1
geekswithblogs.net/akraus1/archive/2006/01/04/64871.aspx उम्मीद है कि इस मदद :)
थॉमस

जवाबों:


25

शायद आपको सेटिंग्स फ़ाइल को जोड़कर देखना चाहिए। (जैसे App.Settings) इस फ़ाइल को बनाने से आप निम्नलिखित कार्य कर सकेंगे:

string mysetting = App.Default.MySetting;
App.Default.MySetting = "my new setting";

इसका मतलब है कि आप आइटमों को संपादित कर सकते हैं और फिर बदल सकते हैं, जहां आइटम दृढ़ता से टाइप किए जाते हैं, और सभी के सर्वश्रेष्ठ ... आपको तैनात करने से पहले किसी भी xml को छूने की ज़रूरत नहीं है!

परिणाम एक अनुप्रयोग या उपयोगकर्ता संदर्भ सेटिंग है।

सेटिंग फ़ाइल के लिए "नया आइटम जोड़ें" मेनू में एक नज़र डालें।


1
Settings.Settings फ़ाइल जोड़ना या गुण / Settings.settings के तहत मौजूदा एक का उपयोग करना एक ही बात है? एक का उपयोग करने के मामले में, मैं कुछ इस तरह से करूंगा: Properties.Settings.Default.IntegrateWithPerforce = _integrateCheckBox.Checked; गुण।
होउमैन

1
काफी संभवतः। मैं हमेशा अलग फ़ाइलों का इस्तेमाल किया है के रूप में मुझे अच्छी तरह से किया है। अगर ऐसा है, तो मैंने कुछ सीखा है
Dan

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

मुझे विश्वास नहीं हो रहा है कि मैं इस समय एक XML फ़ाइल के माध्यम से लूपिंग कर रहा हूँ। इस उपयोगी टिप के लिए बहुत बहुत धन्यवाद!
स्माइली-वेर्बेन-जगर-मैनजेंसन

80

मुझे पता है कि मुझे देर हो चुकी है :) लेकिन मैं इसे कैसे करूँ:

public static void AddOrUpdateAppSettings(string key, string value)
{
    try
    {
        var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        var settings = configFile.AppSettings.Settings;
        if (settings[key] == null)
        {
            settings.Add(key, value);
        }
        else
        {
            settings[key].Value = value;
        }
        configFile.Save(ConfigurationSaveMode.Modified);
        ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name);
    }
    catch (ConfigurationErrorsException)
    {
        Console.WriteLine("Error writing app settings");
    }
}

अधिक जानकारी के लिए MSDN देखें


3
उपरोक्त के साथ ध्यान देने के लिए एक प्रमुख बिंदु यह है कि यदि आप डिबगर (विजुअल स्टूडियो के भीतर) से इसे चला रहे हैं, तो आपके द्वारा बनाए जाने पर प्रत्येक बार app.config फ़ाइल को अधिलेखित कर दिया जाएगा। इसका परीक्षण करने का सबसे अच्छा तरीका है कि आप अपने एप्लिकेशन का निर्माण करें और फिर आउटपुट डायरेक्टरी में जाएं और वहां से अपने निष्पादन योग्य को लॉन्च करें। --- vbcity.com/forums/t/152772.aspx से
यू यांग जियान

69

अपने ऐप में ऐपसेटिंग सेक्शन में मूल्यों को कैसे बदलें।

config.AppSettings.Settings.Remove(key);
config.AppSettings.Settings.Add(key, value);

नौकरी करता है।

बेशक बेहतर अभ्यास सेटिंग वर्ग है, लेकिन यह इस बात पर निर्भर करता है कि आप क्या कर रहे हैं।


4
तीन काजिलियन ऐपसेटिंग संशोधन विचारों को यहां और विदेशों में देखने के बाद, यह सबसे सरल / सबसे अच्छा है, और (महत्वपूर्ण रूप से) काम करता है, भले ही उपयोगकर्ता <appSettings> नोड
डाउनवॉच

39

अनुभाग <appSettings>को प्राथमिकता दें <customUserSetting>। यह (वेब) कॉन्फ़िगरेशन प्रबंधक के साथ पढ़ना और लिखना बहुत आसान है। कॉन्फ़िगरेशनसेक्शन, कॉन्फ़िगरेशनप्लिमेंटेशन और कॉन्फ़िगरेशनप्लीकेशन कलेक्शन से आपको कस्टम क्लासेस प्राप्त करने और कस्टम कॉन्फ़िगरेशनप्रोपरेटी गुणों को लागू करने की आवश्यकता होती है। हर रोज केवल नश्वर आईएमओ के लिए बहुत ज्यादा रास्ता।

यहाँ web.config पढ़ने और लिखने का एक उदाहरण है:

using System.Web.Configuration;
using System.Configuration;

Configuration config = WebConfigurationManager.OpenWebConfiguration("/");
string oldValue = config.AppSettings.Settings["SomeKey"].Value;
config.AppSettings.Settings["SomeKey"].Value = "NewValue";
config.Save(ConfigurationSaveMode.Modified);

इससे पहले:

<appSettings>
  <add key="SomeKey" value="oldValue" />
</appSettings>

उपरांत:

<appSettings>
  <add key="SomeKey" value="newValue" />
</appSettings>

23

जैसा कि आधार प्रश्न जीत के रूपों के बारे में है, यहां समाधान है: (मैं बस विंडोज़ 101 सेटिंग्स को बदलने के लिए user1032413 द्वारा कोड बदल दिया है) यदि यह एक नई कुंजी है:

Configuration config = configurationManager.OpenExeConfiguration(Application.ExecutablePath); 
config.AppSettings.Settings.Add("Key","Value");
config.Save(ConfigurationSaveMode.Modified);

यदि कुंजी पहले से मौजूद है:

Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 
config.AppSettings.Settings["Key"].Value="Value";
config.Save(ConfigurationSaveMode.Modified);

8

अपने सेव कॉल के बाद इसे जोड़ने का प्रयास करें।

ConfigurationManager.RefreshSection( "appSettings" );

1
यह विशेष रूप से महत्वपूर्ण है यदि आप लिख रहे हैं तो उसी एप को पढ़कर त्वरित उत्तराधिकार में आवेदन करें।
ट्रेवर

6

याद रखें कि विन्यास प्रबंधक केवल एक app.config का उपयोग करता है - एक जो स्टार्टअप परियोजना में है।

यदि आप एक समाधान A के लिए कुछ app.config डालते हैं और दूसरे समाधान B से इसका संदर्भ बनाते हैं तो यदि आप B चलाते हैं, तो A से app.config को अनदेखा किया जाएगा।

इसलिए उदाहरण के लिए यूनिट टेस्ट प्रोजेक्ट का अपना ऐप होना चाहिए ।config।


2

मुझे लगता है कि समस्या यह है कि डिबग दृश्य स्टूडियो में सामान्य एक्सनेम का उपयोग नहीं करते हैं।

यह indtead "NameApplication" .host.exe का उपयोग करता है

इसलिए config फाइल का नाम "NameApplication" .host.exe.config है और "NameApplication" .exe.config नहीं है।

और आवेदन बंद होने के बाद - यह वापस app.config पर वापस आ जाता है

इसलिए यदि आप गलत फ़ाइल की जाँच करते हैं या आप गलत समय पर जाँचते हैं तो आप देखेंगे कि कुछ भी नहीं बदला है।


-1

आप इसे मैन्युअल रूप से बदल सकते हैं:

private void UpdateConfigFile(string appConfigPath, string key, string value)
{
     var appConfigContent = File.ReadAllText(appConfigPath);
     var searchedString = $"<add key=\"{key}\" value=\"";
     var index = appConfigContent.IndexOf(searchedString) + searchedString.Length;
     var currentValue = appConfigContent.Substring(index, appConfigContent.IndexOf("\"", index) - index);
     var newContent = appConfigContent.Replace($"{searchedString}{currentValue}\"", $"{searchedString}{newValue}\"");
     File.WriteAllText(appConfigPath, newContent);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.