在运行时修改app.config会引发异常

本文关键字:异常 config 运行时 修改 app | 更新日期: 2023-09-27 18:19:51

我使用app.config文件来存储和读取一些参数(sql server实例名称、用户、密码、日志目录等)。现在,我需要修改一些参数,这些参数取决于用户并管理它,但前提是我从bin/release目录运行.exe

当我创建设置并安装应用程序时,我无法更改此参数——它会抛出TargetInvocationException。我曾尝试以管理员身份运行我的应用程序,但没有成功。

我目前使用的代码如下:

System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings.Remove("username");
config.AppSettings.Settings.Add("username", this.Config.Username);
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");

我尝试过在stackoverflow上找到的其他一些解决方案,但没有成功。

在运行时修改app.config会引发异常

理想情况下,我们不能在应用程序运行时修改配置条目。

当您从bin运行exe时,它没有修改*.exe.config.

相反,它修改了*.vshost.exe.Config文件。

System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); returns reference to *.vshost.exe.Config  file

*.exe.config是只读的,您无法更新此文件。

试试这样的

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
KeyValueConfigurationCollection settings = config.AppSettings.Settings;
 // update SaveBeforeExit
 settings[username].Value = "newkeyvalue"; //how are you getting this.Config.Username
  ...
 //save the file
 config.Save(ConfigurationSaveMode.Modified);
 //relaod the section you modified
 ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name);

以下是一些需要遵循的步骤例如,如果我想修改基于DateTime值的设置。。这个简单的解释应该让你很容易理解。

 1: // Open App.Config of executable   
 2: System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);   
 3: // Add an Application Setting.   
 4: config.AppSettings.Settings.Remove("LastDateChecked");   
 5: config.AppSettings.Settings.Add("LastDateChecked", DateTime.Now.ToShortDateString());   
 6: // Save the configuration file.   
 7: config.Save(ConfigurationSaveMode.Modified);   
 8: // Force a reload of a changed section.   
 9: ConfigurationManager.RefreshSection("appSettings");