C # (.NET) के साथ एक web.config प्रोग्रामेटिक रूप से बदलें


93

मैं web.configप्रोग्राम को C # के साथ कैसे संशोधित / हेरफेर कर सकता हूं ? क्या मैं एक कॉन्फ़िगरेशन ऑब्जेक्ट का उपयोग कर सकता हूं, और, यदि हां, तो मैं web.configकॉन्फ़िगरेशन ऑब्जेक्ट में कैसे लोड कर सकता हूं ? मैं कनेक्शन स्ट्रिंग को बदलते हुए एक पूर्ण उदाहरण रखना चाहूंगा। संशोधन के बाद web.configहार्डडिस्क पर वापस लिखा जाना चाहिए।


ASP.NET 2.0 और ASP.NET 3.5 में web.config को प्रोग्रामेटिक रूप से हेरफेर करने के तरीके के बारे में उनके ब्लॉग पोस्ट की जांच करें। वैकल्पिक रूप से इस प्रश्न की जांच करें, जिसमें आपके प्रश्न का उत्तर है। मैं एक कनेक्शन स्ट्रिंग विन्यास को प्रोग्रामिक रूप से .net में कैसे सेट कर सकता हूं?
शोभन

जवाबों:


115

यहाँ यह कुछ कोड है:

var configuration = WebConfigurationManager.OpenWebConfiguration("~");
var section = (ConnectionStringsSection)configuration.GetSection("connectionStrings");
section.ConnectionStrings["MyConnectionString"].ConnectionString = "Data Source=...";
configuration.Save();

इस लेख में और उदाहरण देखें , आपको प्रतिरूपण पर एक नज़र डालने की आवश्यकता हो सकती है ।


Web.config फ़ाइल में आपके कनेक्शन स्ट्रिंग का नाम क्या है?
एलेक्स ले

लेख का लिंक टूटा हुआ है
विटल

@AlexLE: जब web.config को किसी अन्य स्थान पर रखा जाता है, तो हम फ़ाइल स्थान को कैसे निर्दिष्ट करते हैं। साझा पथ पर एक दूरस्थ सर्वर हो सकता है?
शार्प कोडर

@SharpCoder, पथ एक वर्चुअल पथ है, इसलिए आपको पहले web.config को दूरस्थ सर्वर से अपने स्थानीय एप्लिकेशन (अपने स्वयं के web.config को ओवरराइड नहीं करने के लिए एक अस्थायी फ़ोल्डर के अंदर) की आवश्यकता है, इसे संपादित करें, सहेजें और फिर कॉपी करें दूरस्थ सर्वर के लिए। या एक बेहतर, अधिक जटिल समाधान होगा: एक एपीआई बनाएं जो डी जॉब करता है (डे वेब.कॉन्फिग को बदलें), इसे दूरस्थ सर्वर पर तैनात करें और फिर स्थानीय सर्वर से उपभोग करें।
गिलहर्मे ब्रांको स्ट्रैसिनी

@Skami को आपको "MyConnectionString" नाम से कनेक्शनस्ट्रीमर्स सेट किया जाना चाहिए। इसका अर्थ है अनुभाग ।ConnectionStrings ["MyConnectionString"] मूल्य नाम के साथ मेल खाना चाहिए।
लकाट

12
Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection;
//section.SectionInformation.UnprotectSection();
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
config.Save();

सेक्शन वेरिएबल से यूजर आईडी कैसे प्राप्त करें?
निक्स

5

चूंकि web.config फ़ाइल xml फ़ाइल है इसलिए आप xmldocument वर्ग का उपयोग करके web.config खोल सकते हैं। उस xml फ़ाइल से नोड प्राप्त करें जिसे आप अपडेट करना चाहते हैं और फिर xml फ़ाइल सहेजें।

यहां URL है जो अधिक विस्तार से बताता है कि आप कैसे प्रोग्राम को web.config फ़ाइल को अपडेट कर सकते हैं।

http://patelshailesh.com/index.php/update-web-config-programmatically

नोट: यदि आप web.config में कोई परिवर्तन करते हैं, ASP.NET उस परिवर्तन का पता लगाता है और यह आपके एप्लिकेशन (रीसायकल एप्लिकेशन पूल) को फिर से लोड करेगा और इसका प्रभाव सत्र, एप्लिकेशन और कैश में रखा गया डेटा खो जाएगा (सत्र ग्रहण करना) InProc है और राज्य सर्वर या डेटाबेस का उपयोग नहीं कर रहा है)।


मुझे पता है कि यह तकनीकी रूप से संभव है, मुझे लगता है कि Microsoft द्वारा स्वीकृत / अनुमोदित विधि web.config को तोड़ने के लिए अधिक समय तक चलने वाली और कम विषय होने की संभावना है। हमने इन सभी फ़ाइलों को "हाथ से" अपडेट किया है, लेकिन मुझे लगता है कि यह उत्पादन वेब सर्वर के साथ जोखिम भरा है। बस मेरा 2 सी।
एंथनी हॉर्न

2

यह एक तरीका है जिसका उपयोग मैं AppSettings को अपडेट करने के लिए करता हूं, जो वेब और डेस्कटॉप अनुप्रयोगों के लिए काम करता है। यदि आपको कनेक्शनस्ट्रीम को संपादित करने की आवश्यकता है तो आप उस मूल्य को प्राप्त कर सकते हैं System.Configuration.ConnectionStringSettings config = configFile.ConnectionStrings.ConnectionStrings["YourConnectionStringName"];और फिर एक नया मान सेट कर सकते हैं config.ConnectionString = "your connection string";। ध्यान दें कि यदि आपके पास इन connectionStringsअनुभागों में कोई टिप्पणी है, तो Web.Configउसे हटा दिया जाएगा।

private void UpdateAppSettings(string key, string value)
{
    System.Configuration.Configuration configFile = null;
    if (System.Web.HttpContext.Current != null)
    {
        configFile =
            System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
    }
    else
    {
        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);
}

यह कोड अच्छा है और मैंने इसे अपडाउन किया है, लेकिन यह काम नहीं करेगा यदि ऐपसेटिंग्स को किसी अन्य फ़ाइल में परिभाषित किया गया हो, उदाहरण के लिए: <appSettings फ़ाइल = "C: \ Client \ customSettings.config"> </ appSettings>
बेन जूनियर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.