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

时间:2012-01-10 16:58:37

标签: c# .net app-config

我正在使用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上找到一些其他解决方案,但没有成功......

2 个答案:

答案 0 :(得分:0)

尝试这样的事情

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");

答案 1 :(得分:0)

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

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

而是修改了 *。vshost.exe.Config 文件。

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

* .exe.config是只读的,你不能更新这个文件。