23

我需要在运行时更新 .Net exe app.config 文件的 system.net SectionGroup 中的设置。我在运行时没有对原始配置文件的写入权限(我正在开发一个 .Net dll 加载项,该加载项托管在我无法控制的应用程序提供的 exe 中)所以我希望保存一个副本并在运行时将 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");
4

3 回答 3

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 文件,它会在操作 forlder 中更新“program_name.exe.config”文件。

于 2009-06-11T11:02:18.637 回答
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);


    }
于 2012-11-03T17:22:18.970 回答
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);
于 2012-02-14T07:31:26.940 回答