2009-06-11 22 views
23

पर app.config system.net सेटिंग अपडेट करें मुझे रनटाइम पर .NET exe app.config फ़ाइल के System.net अनुभाग समूह में एक सेटिंग को अद्यतन करने की आवश्यकता है। मेरे पास रनटाइम पर मूल कॉन्फ़िगरेशन फ़ाइल में लेखन पहुंच नहीं है (मैं एक .NET dll ऐड-इन विकसित कर रहा हूं जिसे ऐप द्वारा प्रदान किए गए एक्सई में होस्ट किया गया है जिसका मेरा कोई नियंत्रण नहीं है) इसलिए मैं एक प्रति सहेजने की उम्मीद कर रहा था फ़ाइल का और रनटाइम पर संशोधित संस्करण के साथ exe में कॉन्फ़िगरेशन को प्रतिस्थापित करें। मैंने निम्नलिखित कोशिश की है लेकिन यह काम नहीं कर रहा है। कोई सुझाव?रनटाइम

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
    NetSectionGroup netSectionGroup = config.GetSectionGroup("system.net") as NetSectionGroup; 
    netSectionGroup.Settings.HttpWebRequest.UseUnsafeHeaderParsing = true;      
    config.SaveAs(@"C:\ProgramData\test.config", ConfigurationSaveMode.Full); 

    AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"C:\ProgramData\test.config"); 

उत्तर

45

मैं अपने खुद के डिजाइन कार्यान्वयन की वजह से अपने सवाल से समझ नहीं आप app.config फ़ाइल के लिए उपयोग नहीं है, तो या तो आप सिर्फ कॉन्फ़िग फ़ाइल को बचाने के लिए सक्षम नहीं थे, इसलिए यहाँ एक है कोड का टुकड़ा है कि आप को संशोधित करने और रनटाइम पर कॉन्फ़िग फ़ाइल में appSettings अनुभाग को बचाने के लिए अनुमति देता है:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
KeyValueConfigurationCollection settings = config.AppSettings.Settings; 

// update SaveBeforeExit 
settings[-keyname-].Value = "newkeyvalue"; 
... 
//save the file 
config.Save(ConfigurationSaveMode.Modified); 
//relaod the section you modified 
ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name); 

पुनश्च कोड app.config फ़ाइल आप समाधान संपादक में दिखाई नहीं दे रहा बचत होगी, यह pdate "program_name ऑपरेशन फॉरल्डर में .exe.config "फ़ाइल।

+1

मैं नेट एप्लिकेशन (विंडोज मीडिया सेंटर) के लिए ऐड-इन विकसित कर रहा हूं। एडिन एक डीएलएल का रूप लेता है। नेट असेंबली जो एक अलग मेजबान प्रक्रिया (ehexthost.exe) में लोड होती है, जिसे मीडिया सेंटर exe (ehshell.exe) द्वारा प्रबंधित किया जाता है। मैं मेजबान प्रक्रिया के लिए मूल ऐप.कॉन्फिग फ़ाइल में सहेज नहीं सकता क्योंकि इसकी स्थिति इसलिए वैकल्पिक पथ पर सहेजने की आवश्यकता है। इसके अलावा मैं System.net में परिवर्तन करना चाहता हूं, अनुभाग समूह, ऐप सेटिंग्स नहीं। धन्यवाद। – mthornal

+0

मैं पुष्टि कर सकता हूं कि यह .NET 4.0 में भी काम करता है। (धन्यवाद @AlexDrenea!) मेरे लिए कुंजी (क्षमा करें क्षमा करें) इस तरह की सेटिंग्स थी: '<कॉन्फ़िगरेशन> ' – AndrewJacksonZA

+1

पुष्टि की गई ... यह डीबग मोड में सहेजी नहीं जाएगी। यह केवल तभी सहेजा जाएगा यदि आप बिन फ़ोल्डर में .exe चलाते हैं। मुझे "program_name.exe.config" फ़ाइल में सहेजने का कोई सबूत नहीं मिला। – bizah

2

इस कोड के साथ मैंने कॉन्फ़िगरेशन फ़ाइल की एप्लिकेशन सेटिंग में कनेक्शन स्ट्रिंग बदल दी है ... उम्मीद है कि यह आपकी मदद कर सकता है।

string ConStrng = ConfigurationSettings.AppSettings["ConnectionString"]; 
      string sss = "Data Source="; 
      string xxx = ";Initial Catalog=AlfalahScholarship;Integrated Security=True"; 
      //ConfigurationSettings.AppSetting; 
      System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
      //Get the appSettings section. 
      AppSettingsSection appSettings = (AppSettingsSection)config.GetSection("appSettings"); 
      appSettings.Settings.Remove("ConnectionString"); 
      appSettings.Settings.Add("ConnectionString", sss + txtServerName.Text + xxx); 

      config.Save(ConfigurationSaveMode.Modified); 
      ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name); 
4

सिस्टम का उपयोग कर। कॉन्फ़िगरेशन;

public void save_new_connection() 
    { 

     string ConStrng = ConfigurationManager.ConnectionStrings.ToString(); 
     ConnectionStringSettings conSetting = new ConnectionStringSettings(); 

     conSetting.ConnectionString="server=localho;UserId=root;password=mypass;database=night_anglecourier"; 
     conSetting.Name = "courier.Properties.Settings.night_anglecourierConnectionString"; 
     conSetting.ProviderName = "MySql.Data.MySqlClient"; 

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

     ConnectionStringsSection conSettings = (ConnectionStringsSection)config.GetSection("connectionStrings"); 
     conSettings.ConnectionStrings.Remove(conSetting); 
     conSettings.ConnectionStrings.Add(conSetting); 

     config.Save(ConfigurationSaveMode.Modified); 
     ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name); 


    }