2009-06-11 74 views
23

我需要在运行时更新.Net exe app.config文件的system.net SectionGroup中的设置。我在运行时没有对原始配置文件的写入权限(我正在开发一个.net dll加载项,该加载项位于应用程序提供的exe文件中,我无法控制),所以我希望能够保存副本并在运行时将exe中的配置替换为修改后的版本。我试过以下,但它不起作用。有什么建议么?在运行时更新app.config system.net设置

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); 

PS代码将无法保存您在解决方案编辑器中看到的app.config文件,它会PDATE的“程序名.exe.config“文件中的操作forlder。

+1

我正在开发一个.Net应用程序(Windows Media Center)的加载项。插件的形式是一个dll .Net程序集,它被加载到由Media Center exe(ehshell.exe)管理的单独主机进程(ehexthost.exe)中。我无法保存到主机进程的原始app.config文件,因为它的位置,因此需要保存到备用路径。另外我想更改system.net SectionGroup而不是AppSettings。谢谢。 – mthornal 2009-06-11 11:23:54

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

using System.Configuration;

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); 


    }