在运行时修改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上找到的其他一些解决方案,但没有成功。
理想情况下,我们不能在应用程序运行时修改配置条目。
当您从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");