Обновите настройку system.net системы app.config во время выполнения
Мне нужно обновить параметр в разделе SystemGroupGroup файла .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");
Ответы
Ответ 1
Я не понял из вашего вопроса, если у вас нет доступа к файлу 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);
P.S код не сохранит файл app.config, который вы видите в редакторе решений, он будет pdate файл "program_name.exe.config" в файле forlder.
Ответ 2
с использованием 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);
}
Ответ 3
с этим кодом я изменил строку подключения в настройках приложения файла конфигурации... надеюсь, что это может помочь u.
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);