Обновить параметр app.config system.net во время выполнения

Мне нужно обновить параметр в system.net SectionGroup файла .Net exe app.config во время выполнения. У меня нет доступа для записи к исходному файлу конфигурации во время выполнения (я разрабатываю надстройку .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");

person mthornal    schedule 11.06.2009    source источник


Ответы (3)


Я не понял из вашего вопроса, если у вас нет доступа к файлу 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, который вы видите в редакторе решений, он обновит файл «имя_программы.exe.config» в рабочей папке.

person AlexDrenea    schedule 11.06.2009
comment
Я разрабатываю надстройку для приложения .Net (Windows Media Center). Надстройка принимает форму сборки dll .Net, которая загружается в отдельный хост-процесс (ehexthost.exe), управляемый исполняемым файлом Media Center (ehshell.exe). Я не могу сохранить исходный файл app.config для хост-процесса из-за его местоположения, поэтому необходимо сохранить альтернативный путь. Также я хочу внести изменения в раздел system.net SectionGroup, а не в AppSettings. Спасибо. - person mthornal; 11.06.2009
comment
Я могу подтвердить, что это работает и в .NET 4.0. (Спасибо @AlexDrenea!) Ключевым моментом (извините за каламбур) для меня было иметь такие настройки: <configuration> <appSettings> <add key="blahblah" value="bloog" /> </appSettings> </configuration> - person AndrewJacksonZA; 21.02.2012
comment
Подтверждено... Не сохраняется в режиме отладки. Это сохранится, только если вы запустите .exe в папке bin. Я не видел никаких доказательств его сохранения в файле имя_программы.exe.config. - person bizah; 06.11.2013

используя 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);


    }
person Dileepa Ruwan Dissanayake    schedule 03.11.2012

с помощью этого кода я изменил строку подключения в настройках приложения файла конфигурации ... надеюсь, это поможет вам.

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);
person Hmansoor    schedule 14.02.2012